🇰🇷 한글 설명
Apache bRPC 1.18.0 미만 버전의 스트리밍 기능에서 발생하는 취약점으로, 공격자가 조작된 스트림 피드백 프레임을 전송할 경우 서버 프로세스가 충돌할 수 있습니다. 이로 인해 인증되지 않은 원격 공격자가 서버를 중단시켜 서비스 거부(DoS) 상태를 유발할 수 있습니다.
💡 쉬운 설명
서버와 데이터를 주고받는 과정에서 잘못된 신호를 보내 서버를 강제로 종료시키는 공격입니다. 이 공격을 받으면 서버가 갑자기 꺼져서 서비스를 이용할 수 없게 됩니다.
🇺🇸 원문 (English)
Enforceable assertion in the streaming feature of Apache bRPC (version < 1.18.0) on all platforms allows a remote attacker to crash the server process by sending a malformed stream feedback frame.
Root Cause:
When handling FRAME_TYPE_FEEDBACK frames, bRPC calls Stream::SetRemoteConsumed() which contains CHECK(_cur_buf_size > 0) and unconditionally asserts CHECK(buf.IsEmpty()) on the frame payload. A feedback frame that carries an unexpected payload, or a feedback frame received on a stream where flow control is disabled (cur_buf_size == 0), reaches these assertions. On failure, CHECK failures abort the process, allowing an unauthenticated single client (once a stream is established) to terminate the server and cause a denial of service.
Affected Scenarios:
Use bRPC server with the streaming control feature (Stream API) served from untrusted network.
How to Fix:
1. Upgrade bRPC to version 1.18.0, which fixes this issue.
2. Apply this patch: https://github.com/apache/brpc/pull/3494
The fix rejects malformed feedback frames with EPROTO and closes only the affected stream instead of crashing the whole process, and it bounds buffer shrinking so cur_buf_size never drops to 0 while flow control is enabled.
📍 영향받는 시스템
Apache bRPC version < 1.18.0
⚔️ 공격 벡터
조작된 스트림 피드백 프레임을 전송하여 서버의 assertion을 유발하고 프로세스를 종료시킴
🛡️ 대응 방법
bRPC를 1.18.0 버전 이상으로 업그레이드하거나 제공된 패치를 적용하십시오.
🔧 검증 코드
출력된 버전이 1.18.0 미만인 경우 해당 취약점에 노출된 상태입니다.
brpc_version_cmd --version 2>/dev/null | grep -E '1\.[0-9]+\.[0-9]+' || echo 'Version not found'