🇰🇷 한글 설명
SignXML은 W3C XML 서명 표준의 Python 구현으로, X509 인증서 검증 비활성화와 HMAC 공유 비밀 설정 시 4.0.4 이전 버전이 알고리즘 혼동 공격에 취약합니다. 공격자는 HMAC 대신 비대칭 키로 서명된 페이로드를 제공하여 검증을 우회할 수 있으며, 4.0.4부터 hmac_key 사용 시 HMAC만 허용하도록 제한합니다.
💡 쉬운 설명
SignXML에서 보안 검증을 약하게 설정하면 공격자가 위조된 서명을 통과시킬 수 있습니다. 이를 방지하려면 SignXML을 4.0.4 버전 이상으로 업그레이드하세요.
🇺🇸 원문 (English)
SignXML is an implementation of the W3C XML Signature standard in Python. When verifying signatures with X509 certificate validation turned off and HMAC shared secret set (`signxml.XMLVerifier.verify(require_x509=False, hmac_key=...`), versions of SignXML prior to 4.0.4 are vulnerable to a potential algorithm confusion attack. Unless the user explicitly limits the expected signature algorithms using the `signxml.XMLVerifier.verify(expect_config=...)` setting, an attacker may supply a signature unexpectedly signed with a key other than the provided HMAC key, using a different (asymmetric key) signature algorithm. Starting with SignXML 4.0.4, specifying `hmac_key` causes the set of accepted signature algorithms to be restricted to HMAC only, if not already restricted by the user.
📍 영향받는 시스템
SignXML < 4.0.4 (require_x509=False, hmac_key 설정)
⚔️ 공격 벡터
비대칭 키 알고리즘으로 서명된 페이로드를 제공하여 HMAC 검증 우회
🛡️ 대응 방법
SignXML을 4.0.4 이상으로 업그레이드하거나 expect_config로 알고리즘 제한 설정
🔧 검증 코드
Version이 4.0.4 이상이면 안전, 미만이면 취약
pip show signxml | grep Version