This article is an automated machine-translation of an article in English. We know the translation isn't perfect, but we hope it's useful for people who don't read English.

취약점의 해​​부학 - 인증 버그로 숨어 cURL을 웹 다운로드 툴킷

Filed Under: Featured, Vulnerability

당신은 cURL을 들어 본 적이되지 않을 수 있지만 당신은 아마 그것을 사용하는 소프트웨어를 사용했습니다.

당신의 그 계약 URL과 클라이언트 측 코드를 작성과 거래하는 데 도움이 오픈 소스 프로그래밍 툴킷​​입​​니다.

프로젝트 자체의 단어에서 "cURL을 해당 URL을 groks."

가 쉽게 HTTP, SMTP, POP3 및 더 많은 같은 인기있는 프로토콜을 처리 할 수​​있게 URL 스위스 군용 칼 때문이 인기입니다. 또한 업로드, 다운로드, 인증, 프록시, 쿠키 및 SSL / TLS를 지원합니다.

심지어 지원 고퍼를 당신은 그렇게 멀리 돌아 기억.

모든 노래, 모든 춤 라이브러리 하나 위험은 물론, 잘못하고가 더 코드이다.

그리고 가끔,이 코드도 모호한 비트는 당신이 실행 될지도 모르지만 사용하지 않을 줄 알았는데. 더 나쁜 아직, 그들은 당신이 예상 결코 외부 상황에 의해 triggerable 수 있습니다.

그게 야 곱슬 문제가 여기.

취약한 코드는 7.26.0 릴리스에서 도입 된, DIGEST_MD5 인증을 지원하면이 cURL을 소프트웨어에 추가되었습니다.

DIGEST_MD5는 실제 암호를 보내지 않고, HTTP 또는 POP3 서버에 예를 들어, 암호화되지 않은 연결을 통해 로그인 할 수의 초보 방법입니다.

서버의 무리와 함께 임의의 도전 문자열, 또는 한번 뿐인를 보냅니다 기타 인증 관련 데이터 , 당신은 서버가 제공하는 데이터를 혼란 비밀번호의 암호화 해시와 회신 :

그럼 답장을 킁킁 과자는 직접에서 비밀번호를 복구 할 수 있으며, 문제는 랜덤이며 로그인 할 때마다 다를 수 있기 때문에, 해커가 나중에 회신을 다시 사용할 수 없습니다.

옆으로 : DIGEST_MD5 인증을 사용하지 마십시오. 대신 TLS를 사용하여 전체 세션을 암호화합니다.

DIGEST_MD5 답변을 킁킁 과자를 직접 다시 사용할 수 없습니다,하지만 사전 공격을 사용하여 암호 오프라인 복구를 시도 할 수 있습니다.

TLS이 방지뿐만 아니라, 웹 세션 또는 이메일의 내용을 포함한 전체 거래 비밀을 유지하지 않습니다. 그건 훨씬 더 보안 결과입니다.

여기 cURL을의 취약한 버전에서 버그 코드는 다음과 같습니다

당신이 설명해 줄게 C.에 익숙하지 않은 경우 걱정하지 마십시오.

C에서 메모리 관리 및 사용은 프로그래머까지 남아 있습니다. 당신은 이러한 사용자가 제공 한 텍스트 문자열로 가변 길이 데이터를 안전하게 처리하거나 메모리를 자신과 직접 처리 할 수​​ 있도록 라이브러리 코드를 사용할 수 있습니다.

위의 프로그래머가 후자를 완료했습니다.

첫째, 그는 스택에 고정 길이 메모리 블록의 일련을 할당합니다.

그럼 그 사람은 그 블록에 함수의 호출자가 제공 텍스트 문자열을 복사하지만, 끝에 "문자열 복사"와 "문자열 concatentate"(뾰족한 하나의 문자열에 들지 시스템 함수 strcpy ()와 strcat ()를 사용합니다 수 또 다른) 각각.

당신이이 사람들 복사 얼마나 데이터를 제한 할 수 없기 때문에 현대적인 코드에서, 당신은 그 기능을 사용하지 않습니다.

빵점 (제로) 바이트가 발견 될 때까지 그들은 단순히 출력 문자열에 입력 문자열에서 모든 바이트를 복사. 빵점는 텍스트 문자열의 끝은 C로 표시된다 방법입니다

서버가 인증 도전에 너무 많은 데이터를 보내는 경우, 예를 들어 지나치게 긴 영역 문자열 (서버가 선택한 무엇이든 다 될 수있는 내용),이 기능은을 계산하기 위해 사용하는 버퍼에 너무 많은 데이터를 쑤셔합니다 인증 응답.

버퍼 오버 플로우가 발생합니다, 그리고 대상 데이터 블록 스택에 자동으로 할당 된 이후가 끝나면이 경우,이 함수는 충돌이 발생하는 경우가 있습니다.

스택도 메모리에 주소를 함수가 호출 한 저장 때문이다,가 완료되면 cURL을 소프트웨어가 반환 될 수 있습니다. 문자열 응답은 지나치게 채워지면 반환 주소는 위의 코드에서 덮어 씁니다.

이 수정 프로그램은 간단한 하나였습니다.

통제 할 수없는 strcpy ()와 strcat () 함수는 "대부분의 N 바이트의에 문자열의 포맷 인쇄"를 의미 snprintf 함수를 ()로 대체되었습니다 :

n을 지정 것인지는 당신에게 달렸 때문에 아직도 snprintf와 실수를 할 수 있으며, 당신이주의하지 않은 경우, 당신은 잘못 될 수 있습니다.

그러나 중요한 점은 당신이 단순히 옛날 strcpy ()와 strcat ()와 함께 할 수 없어 알려져 버퍼 크기에 snprintf의 출력을 제한하기 위해 적어도 있습니다 때문입니다.

→ 위의 업데이트 된 cURL을 코드가 아직 완벽하지 않습니다. 프로그래머가 진짜가 작성하고 싶어 얼마나 많은 바이트보고있는 snprintf의 반환 값 ()을 확인해야합니다. 귀하의 버퍼가 충분히 크지 만 아니었다면 다음 출력이 불완전하기 때문에 잘못된 것입니다. 당신은 그것을 사용하지한다고 사항 : 버퍼의 크기를 증가하고 다시 시도하거나 대신 오류를보고합니다.

당신은 아마 컬 사용하는 대부분의 프로그램은 백그라운드에서 수행하기 때문에이 취약점을 악용하는 것은 어려운 일이 될 거에요,이 시점에서 생각하고 있습니다. 그들은 상호 작용하지 않습니다.

일반적으로 알려진 - 좋은 URL의 목록이 사전 구성되어 있습니다, 또는 설치시에 URL을 입력하도록 요청하고, 그건 그거 고 (libcurl라고도 함) cURL을 라이브러리를 사용할 수 있습니다 소프트웨어를 Autoupdating.

위태로운 하나 귀하의 알려진 - 좋은 자동 업데이트 URL을 전환하거나, 누구 당신은 항상 당신이 들어 본 적이없는 하나에 사용한 POP3 이메일 서버에서 변경을 설득 할 수에게 당신을 얘기 할 수 공격자는 반드시 쉽게 찾아 낼 직접 자신의 악성 코드를 실행하는 데 점점 간단하게 당신을 감염합니다.

그건 사실이야,하지만 위험이 있단 말야.

공격자가 DNS 설정과 조롱에 의해 또는 서비스 제공 업체의 네트워크의 가장자리에 서버를 해킹하여 예를 들어, 귀하의 오토 업데이터 또는 POP3 클라이언트에서 요청을 리디렉션 할 수 있다면, 그는 거짓말 쟁이 사이트 및 시도에로가는 당신을 보낼 수 거기에서 당신을 이용.

때문에 버퍼 오버 플로우의이 될 수있는 드라이브에 다운로드 곳 모두 루프의 사용자 정보 동의를 절단, 자체 오작동에 속하고 있습니다 컬.

수업?

  • strcpy ()strcat ()를 사용하지 마십시오.
  • 다시는.
  • (또는 snprintf를 사용 strlcpy ()와 strlcat () 대신에, 또는 이와 유사한 것).
  • 당신은 잘못된 결과를 사용하여 종료되지 않도록 항상 문자열 처리 기능의 반환 값을 확인하십시오.

다음 문제는이 버그 cURL을 코드를 포함 사용하는 소프트웨어, 경우, 또는인지 파악해야합니다. (7.26.0에서 7.28.1 포함 cURL을 버전이 영향을받습니다.)

최선의 방법은 주위에 물어 시작 ...

NB. 여러 소포스 제품은 libcurl 사용하지만, 그들 중 아무도 취약한 버전의 코드를 사용하지 않습니다.

You might like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

About the author

Paul Ducklin is a passionate security proselytiser. (That's like an evangelist, but more so!) He lives and breathes computer security, and would be happy for you to do so, too. Paul won the inaugural AusCERT Director's Award for Individual Excellence in Computer Security in 2009. Follow him on Twitter: @duckblog