🇰🇷 한글 설명
Go JOSE 라이브러리는 4.1.6 이전 버전에서 JWK로부터 전달받은 RSA 모듈러스 및 소수 값의 크기와 일관성을 검증하지 않은 채 crypto/rsa.PrivateKey.Validate에 넘깁니다. Go 1.24 이상에서는 조작된 대형 또는 비정상적인 RSA 파라미터로 인해 검증 과정이 3제곱 시간의 CPU를 소모할 수 있어, 신뢰할 수 없는 출처의 JWK를 파싱하는 애플리케이션에서 원격 서비스 거부가 발생할 수 있습니다. 이 문제는 버전 4.1.6에서 수정되었습니다.
💡 쉬운 설명
JWT나 암호화 키를 처리하는 프로그램이 악의적으로 만든 키 데이터를 받으면 과도하게 계산을 하느라 멈출 수 있습니다. 이를 이용하면 공격자가 서비스를 마비시킬 수 있습니다.
🇺🇸 원문 (English)
Go JOSE provides an implementation of the Javascript Object Signing and Encryption set of standards in Go, including support for JSON Web Encryption (JWE), JSON Web Signature (JWS), and JSON Web Token (JWT) standards. Prior to 4.1.6, go-jose parses attacker-controlled RSA modulus and prime values from JWKs without enforcing size and consistency bounds before passing them to crypto/rsa.PrivateKey.Validate. On Go 1.24 and later, crafted large or degenerate RSA parameters can make that validation consume cubic CPU time, allowing remote denial of service in applications that parse JWKs from untrusted sources. This issue is fixed in version 4.1.6.
📍 영향받는 시스템
go-jose(gopkg.in/go-jose/go-jose.v2 및 github.com/go-jose/go-jose/v4) 4.1.6 미만 버전을 사용하고 Go 1.24 이상으로 빌드된 애플리케이션
⚔️ 공격 벡터
공격자가 신뢰할 수 없는 입력으로 조작된 대형 또는 비정상 RSA 파라미터가 담긴 JWK를 전송하여 서버의 CPU를 소진시킴
🛡️ 대응 방법
go-jose 라이브러리를 4.1.6 이상으로 업그레이드하고 go.mod에서 의존성을 갱신한 뒤 재빌드 및 재배포
🔧 검증 코드
출력된 go-jose 버전이 4.1.6 미만이면 취약하므로 업그레이드가 필요하고, 4.1.6 이상이면 패치가 적용된 것입니다.
go list -m all 2>/dev/null | grep go-jose