🇰🇷 한글 설명
Erlang/OTP의 inets httpd에서 리소스 제한 없이 할당이 발생하는 취약점으로, 인증되지 않은 원격 공격자가 다수의 연결을 유지함으로써 서비스 거부(DoS)를 유발할 수 있습니다. max_clients 옵션이 명시적으로 설정되지 않은 경우, 기본값인 150이 적용되지 않고 무제한의 연결을 허용하여 프로세스, 메모리 및 파일 디스크립터 고갈을 초래합니다.
💡 쉬운 설명
서버에 접속할 수 있는 인원 제한 설정이 제대로 작동하지 않아, 공격자가 가짜 연결을 무수히 많이 만들어 서버를 마비시킬 수 있는 문제입니다. 서버가 너무 많은 연결을 처리하려다 메모리와 자원을 모두 써버려 정상적인 사용자가 접속할 수 없게 됩니다.
🇺🇸 원문 (English)
Allocation of Resources Without Limits or Throttling vulnerability in Erlang/OTP inets httpd allows an unauthenticated remote attacker to cause denial of service by opening and holding open a large number of connections. The max_clients option is documented to default to 150, and the inets hardening guide presents that limit as the first layer of denial-of-service defence, but a server that does not set it explicitly accepts an unlimited number of simultaneous connections. Establishing the connections is sufficient; no valid request and no authentication are required.
The accept gate in httpd_manager:handle_new_connection/4 reads the option with httpd_util:lookup/2, which returns undefined when the key is absent, rather than the three-argument form carrying the 150 default that the neighbouring get_ustate/2 uses. Erlang term ordering places every integer before every atom, so the Count =< Max guard holds for any connection count and the server never returns {reject, busy}. Each accepted connection occupies a worker process and a socket for as long as it is held, driving the node towards process, memory and file descriptor exhaustion. Servers that set max_clients explicitly are unaffected, because a configured value is applied as intended.
This issue affects OTP from OTP 17.0 before OTP 27.3.4.17, from OTP 28.0 before OTP 28.5.0.6, and from OTP 29.0 before OTP 29.0.6, corresponding to inets from 5.10 before 9.3.2.7, from 9.4 before 9.6.2.3, and from 9.7 before 9.7.2.
📍 영향받는 시스템
OTP 17.0 ~ 27.3.4.17, 28.0 ~ 28.5.0.6, 29.0 ~ 29.0.6 (inets 5.10 ~ 9.3.2.7, 9.4 ~ 9.6.2.3, 9.7 ~ 9.7.2 포함)
⚔️ 공격 벡터
인증 없이 다수의 TCP 연결을 생성하고 유지하여 서버 자원을 고갈시키는 방식
🛡️ 대응 방법
Erlang/OTP를 최신 보안 패치 버전(OTP 27.3.4.17, 28.5.0.6, 29.0.6 이상)으로 업데이트하거나, httpd 설정에서 max_clients 옵션을 명시적으로 설정하십시오.
🔧 검증 코드
출력된 OTP 버전이 취약한 버전 범위(예: 27.3.4.17 미만 등)에 해당하는지 확인하십시오.
erl -eval 'io:format("~nOTP Version: ~n", [erlang:system_info(otp_release)]), halt().' -noshell