🇰🇷 한글 설명
Erlang OTP의 public_key 모듈에서 인증서 신뢰 체인을 부적절하게 검증하여 발생하는 취약점입니다. basicConstraints가 cA:false로 설정되어 있고 keyUsage 확장 기능이 없는 인증서가 중간 발행자로 오인될 수 있어, 인증서 체인 위조가 가능합니다.
💡 쉬운 설명
인증서가 다른 인증서를 발급할 권한이 없는데도 불구하고, 시스템이 이를 권한이 있는 것으로 잘못 판단하는 문제입니다. 이를 통해 공격자는 가짜 신분증을 만들어 정상적인 보안 연결을 속일 수 있습니다.
🇺🇸 원문 (English)
Improper Following of a Certificate's Chain of Trust vulnerability in Erlang OTP public_key (pubkey_cert module) allows a non-CA certificate to be accepted as an intermediate issuer, enabling certificate chain forgery.
In lib/public_key/src/pubkey_cert.erl, pubkey_cert:validate_extensions/7 contains two flaws that together allow a certificate with basicConstraints cA:false and no keyUsage extension to be used as an intermediate issuer in a chain passed to public_key:pkix_path_validation/3: the cA:false clause recurses into the remaining extensions without rejecting the certificate when it is in issuer position, and the keyUsage check only fires when the extension is present, so a certificate lacking keyUsage entirely bypasses the keyCertSign enforcement.
Any party holding an end-entity certificate with basicConstraints cA:false and no keyUsage extension, issued by any CA in the victim's trust store, can use that certificate's private key to sign forged leaf certificates for arbitrary identities. public_key:pkix_path_validation/3 accepts the resulting chain, and by extension every TLS or mTLS endpoint built on the OTP ssl application that relies on the default verifier is affected, including server identity verification on the client side and client certificate verification on mTLS servers.
This issue affects OTP from OTP 17.0 before OTP 27.3.4.19, OTP 28.5.0.8, and OTP 29.1.2, corresponding to public_key from 0.22 before 1.17.1.7, 1.20.3.6, and 1.21.8. Whether OTP before OTP 17.0, corresponding to public_key before 0.22, is affected is unknown.
📍 영향받는 시스템
Erlang OTP 17.0 미만(미확인), 17.0 ~ 27.3.4.19, 28.5.0.8, 29.1.2 및 해당 public_key 버전
⚔️ 공격 벡터
권한이 없는 엔티티 인증서의 개인키를 사용하여 임의의 신원을 가진 위조된 인증서 체인을 생성 및 제출
🛡️ 대응 방법
Erlang OTP를 최신 보안 패치 버전(OTP 27.3.4.19, 28.5.0.8, 29.1.2 이상)으로 업데이트
🔧 검증 코드
출력된 OTP 버전이 취약한 버전 범위(예: 27.3.4.19 미만)에 포함되는지 확인
erl -eval 'io:format("~s~n", [erlang:system_info(otp_release)]), halt().' -noshell
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
💻 영향받는 소프트웨어
IBM WebSphere Application Server