2012-04-10 7 views
6

Fortify 보안 검토에서 경로 조작 취약점을 알려줍니다. 대부분은 명백하고 쉬운 수정 이었지만 다음의 수정 방법을 이해할 수는 없습니다.경로 조작 (보안 취약성)

string[] wsdlFiles = System.IO.Directory.GetFiles(wsdlPath, "*.wsdl"); 

"wsdlPath"는 텍스트 상자에서 입력됩니다. 이 문제는 해결할 수없는 것입니까? 경로가 존재하는지 등을 검증 할 수는 있지만 취약점을 어떻게 도울 수 있습니까?

+1

이 코드는 어떻게 실행됩니까? 'wsdlPath'를 입력하는 사용자의 자격 증명으로 실행되는 Windows 응용 프로그램이라면 아무 것도 볼 수 없습니다. Windows 서비스 또는 웹 사이트의 일부로 실행되는 경우 문제가 발생합니다. –

+0

요새화 리뷰가 삽입 된 문자열을 제공 했습니까? – Tung

+0

@AndersAbel - 웹 앱. 인증 된 사용자가 경로를 입력하고 올바른 경로이면 승인됩니다. – Induster

답변

8

사용자가 내용을 결정한 텍스트 상자에서 항상 데이터를 가져오고 코드가 해당 사용자의 권한을 사용하여 실행되는 경우 유일한 위험은 공격하는 사용자의 위협입니다.

낮은 신뢰도의 적대적인 코드이 해당 문자열의 내용을 판단 할 수있는 경우, 적대적인 코드가 다음과 같은 시도를 할 수 있습니다. 사실을 발견하다 사용자의 컴퓨터는 "그런 것과 같은 프로그램이며 보안 취약성이 설치되어 패치되지 않았습니까?"또는 "이 컴퓨터에 'admin'이라는 사용자가 있습니까? 등등.

+0

이 페이지에 액세스 할 수있는 유일한 사용자는 시스템 관리자입니다. 관리자 수준의 액세스 권한을 가진 사람이 몇 명 있습니다. 이 취약점을 "낮음"으로 간주하기에 충분한 "피해 통제"라고 생각합니다. 나는이 것을 이보다 강하게 만들 방법이 없다. 귀하의 의견을 보내 주셔서 감사합니다. – Induster

+0

이 정보를 입력 한 인증 된 사용자가 유용한 정보를 얻지 못하기 때문에 이것을 답변으로 표시했습니다. 최종 사용자, 예, 절대적으로 ...하지만 여기서는 그렇지 않습니다. – Induster

+0

@Induster - 입력이 유효한 경로와 파일 이름 만 허용하도록 필터링되어 있는지 확인하여 더욱 강력하게 만듭니다. 예, 관리자 액세스 권한 만 있으면 문제가 완화되지만 공격자가 관리자 액세스 권한을 얻으면 사용자가 앱뿐만 아니라 서버 자체에 액세스 할 수있게됩니다. –

2

필터링되지 않은 OS API에는 직접 어떤 것도 입력하지 마십시오. 당신은 입력을 위생해야하고, 그것이 경로를 포함하지 않는지 확인해야한다. (예를 들어, "../../../somefile"그리고 긴 이름을 자르고 유효한 파일 이름 문자만을 포함하는지 확인한다.

+0

입력을 제대로 처리 중입니다. 이것은 사용자 입력에서 비롯 되었기 때문에 분명히 빨간색으로 표시되었습니다. 그러나 그것은 손상되지 않은 채로 남아 있어야합니다. 사용자 입력을 없애기에 부족한 옵션이없는 것처럼 보입니다. 어쩌면 누군가 여기서 내가 볼 수없는 것을 볼 수 있습니다. – Induster

+1

@Induster - 귀하의 답변은 당황 스럽습니다. "입력이 제대로 처리되어야합니다"라는 것은 무엇을 의미합니까? 귀하의 의견은 그렇지 않다는 것을 나타냅니다. 불법적 인 데이터를 OS API에 공급하지 않도록 입력 내용을 암호화하거나 허용해서는 안되는 파일 경로를 지정해야합니다. 사용자가 입력 할 때 완벽하게 받아 들일 만하다고 생각된다면, 시스템 암호 파일을 말하면됩니다. –

1

이 코드를 사용하면 인증되고 해당 기능을 사용할 권한이있는 모든 사용자가 서버의 파일 시스템에 액세스 할 수 있습니다. 액세스는 웹 응용 프로그램을 실행하는 서비스 계정의 자격 증명을 사용하여 수행됩니다.

반환 된 데이터의 사용 방법에 따라 악의적 인 사용자가 더 많은 정보를 얻거나 의도하지 않은 방식으로 서버를 작동하게 할 수 있습니다.

허용되는 경로 집합을 하나 또는 몇 개의 엄선 된 디렉터리로만 제한해야합니다. Path 클래스의 함수를 사용하여 문자열을 경로로 결합합니다. 사용자가 c:\allowedpath\..\windows\system32을 입력하는 것처럼 처리합니다.

관련 문제