상세 컨텐츠

본문 제목

CVE-2017-3737 : OpenSSL Read/write after in error state 취약점

국내외 보안동향

by 알약(Alyac) 2017. 12. 11. 15:49

본문

취약점 개요


"error state" 상태에서 SSL_read() 혹은 SSL_write() 함수를 호출할 때, "error state"메커니즘의 버그 때문에 원래의 의도대로 동작하지 않게 됩니다. 이 때문에 원래 데이터가 OpenSSL을 통해 데이터가 암/복호화 되어야 하는데, 더 이상 SSL/TLS 레이어에서 암/복호화 처리가 불가하게 됩니다. 


CVE 번호


CVE-2017-3737



취약점 원인


OpenSSL 라이브러리를 호출하는 응용 프로그램에 버그가 있습니다. 이 버그는, 헨드쉐이크 과정 중에서 이미 "fatal error"이 발생하였지만, bug로 인하여 SSL_read()/SSL_write()가 호출되는 것입니다. 해당 취약점은 2017년 11월 10일,David Benjamin(Google)에 의하여 OpenSSL에 제출되었습니다. 



상세내용


OpenSSL은 1.0.2b부터 "error state"라는 매커니즘을 도입했습니다. 이는 즉, 핸드쉐이크 과정 중에서 "fatal error"가 발생하면, OpenSSL은 "error state" 상태로 진입하게 됩니다. 즉, 이때는 지속적으로 헨드쉐이크를 시도해도 "error state" 매커니즘으로 인하여 OpenSSL이 fail 되게 됩니다. 헨드쉐이크 과저에서 사용되는 함수들 SSL_do_handshake(),  SSL_accept() 및 SSL_connect()에는 모두 이러한 메커니즘이 적용됩니다. 


하지만, "error state" 상태에서 SSL_read() 혹은 SSL_write() 함수를 호출할 때, "error state"메커니즘의 버그 때문에 원래의 의도대로 동작하지 않게 됩니다.


이러한 상황에서 ”fatal error”는 초기에 자신을 호출 한 함수로 반환되게 됩니다. 만약 이때 어플리케이션이 동일한 SSL 개체에 대해 다시 SSL_read()/SSL_write()을 호출한다면, OpenSSL은 succeed되며, 그 후 원래 데이터가 OpenSSL을 통해 암/복호화 되어야 하는 데이터가 더 이상 SSL/TLS 레이어에서 암/복호화 처리가 불가능 하게 됩니다. 



영향받는 버전


OpenSSL 1.0.2b~1.0.2n이전의 모든 버전

OpenSSL 1.1.0 버전은 영향받지 않음



패치방법

OpenSSL 1.0.2을 사용하는 사용자들은 OpenSSL 1.0.2n버전으로 업데이트





참고 : 

https://www.openssl.org/news/secadv/20171207.txt

관련글 더보기

댓글 영역