🇰🇷 한글 설명
Data::Entropy 0.010 이전 Perl 모듈은 Random.org 및 randomnumbers.info 원격 엔트로피 소스를 평문 HTTP로 가져옵니다. RandomOrg 무결성 검사는 비어 있지 않은 모든 바이트열을 통과시켜 사실상 무력화되어 있습니다. 이로 인해 경로상 공격자가 응답을 조작해 rand_bits, rand_int 결과를 임의로 결정할 수 있습니다.
💡 쉬운 설명
이 프로그램은 난수를 인터넷에서 평문으로 받아오는데, 중간에서 가로챈 공격자가 가짜 난수를 보내면 검사도 통과시켜 버립니다. 그래서 암호키 등 보안에 쓰이는 난수가 예측 가능해질 수 있습니다.
🇺🇸 원문 (English)
Data::Entropy versions before 0.010 for Perl read remote entropy sources over plain HTTP.
The Data::Entropy::RawSource::RandomOrg and Data::Entropy::RawSource::RandomnumbersInfo remote sources are accessed over plain HTTP.
The Data::Entropy::RawSource::RandomOrg integrity check trivially matches any non-empty byte string.
Any on-path attacker, such as open WiFi, a compromised ISP, captive portal, or a hostile egress proxy substitutes the response and thereby chooses the bytes returned by rand_bits and rand_int for every application that selected one of these sources via with_entropy_source. The _checkbuf method response is equally attacker-controlled, so the retry/sleep behaviour is steerable too.
📍 영향받는 시스템
Data::Entropy Perl 모듈 0.010 미만 버전 (with_entropy_source로 RandomOrg 또는 RandomnumbersInfo 소스를 사용하는 모든 애플리케이션)
⚔️ 공격 벡터
공개 와이파이, 침해된 ISP, 캡티브 포털, 악성 프록시 등 네트워크 경로상 공격자가 HTTP 응답을 변조하여 생성되는 난수 값을 통제
🛡️ 대응 방법
Data::Entropy를 0.010 이상으로 업그레이드하고, 원격 엔트로피 소스 대신 로컬 CSPRNG(/dev/urandom 등)를 사용하도록 설정 변경
🔧 검증 코드
출력된 버전이 0.010 미만이면 취약하며, 0.010 이상이면 패치가 적용된 것입니다. 모듈이 설치되지 않았다면 결과가 비어 있습니다.
perl -MData::Entropy -e 'print "$Data::Entropy::VERSION\n"' 2>/dev/null || cpanm --info Data::Entropy 2>/dev/null | head -1