MS10-007 관련 개발자용 권고사항
이 글은 ShellExecute API와 관련된 URL 검증 취약점(CVE-2010-0027)를 다루고 있습니다. 관련된 PoC는 BID-37884를 참조하시고 원문은 마이크로소프트 SRD 블로그의 MS10-007: Additional information and recommendations for developers를 참고하시기 바랍니다.
어떻게 이 취약점을 악용할 수 있습니까?
이번 취약점은 유효한 URL처럼 보이지만 실제로는 임의의 코드 실행을 초래할 수 있는 변형된 URL을 ShellExecute가 처리하는 경우 발생합니다. 주변을 살펴보면 ShellExecute를 이용하여 브라우저를 시작시키도록 만들어놓은 경우가 많습니다. URL처럼 보이는 문자열은 ShellExecute로 넘겨서 실행하면 된다고 생각하는 개발자가 많은데 원래 ShellExecute API의 기능은 파일을 실행하는 것입니다. 이번 취약점처럼 유효한 URL처럼 보이더라도 실제로는 시스템 명령을 실행하게 되는 경우가 발생할 수 있습니다.
개발자 권고사항
ShellExecute를 써서 URL 기반 네비게이션을 구현하려는 경우 매개변수의 유효성 검증에 주의를 기울이시기 바랍니다. 단순히 [scheme]://[FQDN]/[path]?[querystring] 포맷인지만 확인하지 말고 넘어온 URL 스킴이 허용된 스킴인지 검증하셔야 합니다. 이 부분은 안전한 웹 응용 프로그램 작성을 위한 마이크로소프트 설계 가이드라인의 4장에도 나오는 내용입니다. 이런 식으로 확실하게 검증해야만 API에서 취약점이 발견되는 상황에서도 안전을 도모할 수 있습니다.





악용된 사례가 있을지 궁금하군요.
개발자 입장에서 보면 정상적인 포맷인지 확인하는 예외처리만 두었어도 안정적인 코딩으로 볼 것 같습니다.
솔직히 권고문 보면서 살짝 소름돋았습니다. 사람이 이렇게 생각하기도 하는구나 싶기도 해서...취약점은 볼때마다 신기합니다.
그렇죠 뭐.. 전 개발자라 모의해킹 하시는 분들 보면 신기해요..