🇰🇷 한글 설명
OpenSSL의 BIO_new_NDEF 함수에서 ASN.1 데이터를 스트리밍할 때 메모리 해제 후에도 내부 포인터가 남아있는 Use-After-Free 취약점이 발견되었습니다. 잘못된 공개 키를 사용하는 등의 특정 조건에서 BIO 체인이 제대로 정리되지 않아, 이후 BIO_pop() 호출 시 프로그램 충돌이 발생할 수 있습니다.
💡 쉬운 설명
프로그램이 이미 사용이 끝나서 삭제한 메모리 주소를 다시 참조하려고 할 때 발생하는 오류입니다. 이로 인해 보안 프로그램이나 통신 모듈이 갑자기 멈추거나 강제로 종료될 수 있습니다.
🇺🇸 원문 (English)
The public API function BIO_new_NDEF is a helper function used for streaming
ASN.1 data via a BIO. It is primarily used internally to OpenSSL to support the
SMIME, CMS and PKCS7 streaming capabilities, but may also be called directly by
end user applications.
The function receives a BIO from the caller, prepends a new BIO_f_asn1 filter
BIO onto the front of it to form a BIO chain, and then returns the new head of
the BIO chain to the caller. Under certain conditions, for example if a CMS
recipient public key is invalid, the new filter BIO is freed and the function
returns a NULL result indicating a failure. However, in this case, the BIO chain
is not properly cleaned up and the BIO passed by the caller still retains
internal pointers to the previously freed filter BIO. If the caller then goes on
to call BIO_pop() on the BIO then a use-after-free will occur. This will most
likely result in a crash.
This scenario occurs directly in the internal function B64_write_ASN1() which
may cause BIO_new_NDEF() to be called and will subsequently call BIO_pop() on
the BIO. This internal function is in turn called by the public API functions
PEM_write_bio_ASN1_stream, PEM_write_bio_CMS_stream, PEM_write_bio_PKCS7_stream,
SMIME_write_ASN1, SMIME_write_CMS and SMIME_write_PKCS7.
Other public API functions that may be impacted by this include
i2d_ASN1_bio_stream, BIO_new_CMS, BIO_new_PKCS7, i2d_CMS_bio_stream and
i2d_PKCS7_bio_stream.
The OpenSSL cms and smime command line applications are similarly affected.
📍 영향받는 시스템
OpenSSL (CMS, SMIME, PKCS7 스트리밍 기능을 사용하는 버전)
⚔️ 공격 벡터
유효하지 않은 CMS 수신자 공개 키를 포함한 악의적인 데이터를 전송하여 메모리 오류 유도
🛡️ 대응 방법
OpenSSL을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 OpenSSL 버전이 취약점이 해결된 패치 버전인지 확인