🇰🇷 한글 설명
DRPC 서버가 함수 이름을 요청 큐와 매핑하여 저장할 때, 사용된 함수 이름을 프로세스 종료 전까지 삭제하지 않는 결함이 있습니다. 공격자가 임의의 함수 이름을 지속적으로 전송하면 서버의 힙 메모리가 점진적으로 고갈되어 서비스 거부(DoS) 상태에 빠질 수 있습니다.
💡 쉬운 설명
공격자가 가짜 이름들을 계속 보내면 서버가 그 이름을 모두 기억하려고 하다가 메모리가 꽉 차서 멈춰버리는 문제입니다. 별도의 인증 없이도 공격이 가능하여 위험도가 매우 높습니다.
🇺🇸 원문 (English)
Description
The DRPC server kept a map from function name to request queue and created an entry the first time a
function name was seen. No code path ever removed an entry: request cleanup removed the request from its
queue, and the shutdown path drained queues, but the queue object and its map entry remained for the life of
the process.
Function names come from the client and are not constrained to functions any topology has registered, so the
number of retained entries is bounded only by the number of distinct names an attacker chooses to send, and
each retained entry holds the name itself. `drpc.authorizer` is unset by default, so no credentials are
required to reach the endpoint.
The retained state is permanent rather than a transient load spike, so the effect accumulates until the DRPC
server exhausts its heap.
Mitigation
Upgrade to 3.1.0, where a function's queue is removed once nothing is waiting in it.
Users who cannot upgrade immediately should configure `drpc.authorizer` so that only trusted principals can
reach the DRPC endpoints, and should ensure the DRPC ports are not reachable from untrusted networks.
Credit
The ASF -- found using Claude agents to study the security of open-source projects, validated and reported by Apache Storm.
📍 영향받는 시스템
DRPC 서버 (3.1.0 미만 버전)
⚔️ 공격 벡터
인증 없이 임의의 함수 이름을 포함한 요청을 지속적으로 전송하여 메모리 누수 유발
🛡️ 대응 방법
DRPC 버전을 3.1.0 이상으로 업그레이드하거나, drpc.authorizer를 설정하여 접근 권한을 제한하십시오.
🔧 검증 코드
출력된 버전이 3.1.0 이상인지 확인하여 취약점 여부를 판단합니다.
drpc --version 2>/dev/null | grep -E '3\.[1-9]\.' || echo 'Version check failed'