flawopen.com/Teardowns/cve-2026-1731-beyondtrust-websocket-command-injection
CVE-2026-1731: BeyondTrust 명령 주입
CVE-2026-1731은 패치되지 않은 BeyondTrust Remote Support/PRA에서 WebSocket을 통한 인증 전 OS 명령 실행을 허용합니다. 패치하고 노출된 장비를 조사하세요.
접수대에서 방문자에게 버전 번호를 묻고, 숫자만 확인하는 대신 수식을 계산하는 계산기에 답을 전달한다고 생각해 보세요. 입력이 데이터에서 명령으로 바뀔 수 있습니다. CVE-2026-1731은 BeyondTrust 서비스에서 이 경계를 노출했습니다. 수정 사항은 비교 전에 짧은 십진수 버전이 아닌 입력을 거부합니다.
핵심 개념 및 용어
CVE-2026-1731- BeyondTrust Remote Support 및 Privileged Remote Access의 인증 불필요 OS 명령 주입 취약점입니다.
thin-scc-wrapper- 클라이언트 프로토콜 경로에 사용되는 BeyondTrust shell wrapper입니다. Rapid7의 패치 분석은 상대가 보낸 버전 값의 처리를 취약 경계로 지목합니다.
Bash 산술 평가- Bash 숫자 비교 연산자는 피연산자를 산술식으로 평가합니다. 따라서 신뢰할 수 없는 텍스트가 데이터와 식의 경계를 넘을 수 있습니다.
CWE-78- OS 명령에서 사용되는 특수 요소를 부적절하게 무력화하는 문제로, OS 명령 주입이라고도 합니다.
CISA KEV- 실제 공격에서 악용 증거가 확인된 취약점을 기록하는 CISA 목록입니다.
프레임워크 매핑
- 이 가이드에서 설명하는 약점의 CWE 참조: CWE-78
- CISA KEV — 추가일 2026-02-13 — CVE-2026-1731
근본 원인 분석 (Root Cause)
BeyondTrust의 2026년 2월 보안 권고는 CVE-2026-1731을 Remote Support 및 Privileged Remote Access의 인증 전 원격 코드 실행 취약점으로 설명하며 CWE-78과 CVSS 4.0 9.9점을 지정합니다. 특수하게 구성된 클라이언트 요청은 사이트 사용자 권한으로 OS 명령을 실행할 수 있었습니다. Rapid7의 공급업체 패치 분석에 따르면 소스 코드 경계는 thin-scc-wrapper의 WebSocket 경로입니다. 스크립트는 상대가 제어하는 remoteVersion을 읽어 Bash 숫자 연산자로 비교합니다. 이 비교는 산술 평가를 수행하므로 단순한 숫자가 아닌 값은 무해한 텍스트가 아니라 식으로 해석될 수 있습니다. 패치는 비교 전에 ASCII 숫자 1~2자리(^[0-9]{1,2}$)만 허용합니다. 아래 코드는 공개 자료를 바탕으로 축약한 예시이며 전체 제품 스크립트나 악용 증명은 아닙니다. BeyondTrust는 2월 10일 초기 악용 시도를 확인했고, 2월 9일 전에 패치되지 않은 인터넷 노출 자체 호스팅 시스템에서 제한적인 활동이 있었다고 밝혔습니다. 이후 Google Threat Intelligence Group은 여러 공격 클러스터와 각기 다른 후속 활동을 보고했습니다. 이는 관찰된 활동의 증거이며 모든 피해 시스템에 동일한 공격 체인이 있었다는 뜻은 아닙니다.
단계별 공격 실행 흐름
외부에 공개된 appliance가 프로토콜 연결을 수락한다
영향을 받는 서비스는 씬 클라이언트 프로토콜용 WebSocket 경로를 노출합니다. Rapid7은 취약 경로가 인증 없이 접근 가능하다고 설명하고 BeyondTrust는 인증 전 RCE로 분류합니다.
상대가 프로토콜 버전을 제공한다
wrapper가 연결에서 원격 버전 값을 읽습니다. 이 값은 요청자가 제어하며 신뢰할 수 있는 로컬 설정이 아닙니다.
Bash가 값을 산술 피연산자로 처리한다
취약한 비교는 Bash 숫자 연산자를 사용합니다. Bash는 피연산자를 식으로 평가하므로 검증하지 않은 입력이 단순 텍스트로 남는다고 보장할 수 없습니다.
명령 주입이 서비스 계정 권한으로 이어진다
악용에 성공하면 BeyondTrust 사이트 사용자 컨텍스트에서 OS 명령을 실행할 수 있습니다. 공급업체는 기밀성, 무결성, 가용성 영향을 모두 높음으로 평가합니다.
관찰된 악용이 후속 위험을 만든다
BeyondTrust는 초기 시도와 노출된 미패치 자체 호스팅 appliance를 겨냥한 제한적 활동을 보고했습니다. GTIG는 이후 여러 클러스터와 후속 행위를 보고했습니다. 각 보고는 특정 캠페인의 증거이며 보편적인 체인을 뜻하지 않습니다.
패치가 비교 전에 입력을 검증한다
패치는 잘못된 원격 버전을 거부하고 wrapper를 종료합니다. 유효한 값만 프로토콜 협상을 계속합니다. 해당 패치나 수정 버전을 적용하고 취약 기간에 노출된 시스템을 조사하세요.
소스 코드 비교: 취약한 구현 vs 보안 패치
Rapid7에 따르면 BT26-02 패치는 remoteVersion 비교 전에 한두 자리 숫자 검사를 추가합니다. 코드 조각은 제품 프로토콜과 요청 세부사항을 생략한 축약본입니다. 핵심 원칙은 Bash 산술 평가 전에 검증하는 것입니다. 따옴표만으로 산술 피연산자가 안전해지지는 않습니다. 가능하면 shell을 사용하지 않는 형식이 지정된 구성 요소에서 파싱하고 비교하며 프로토콜 경계에서 잘못된 값을 거부하세요.
소스 코드 발췌: thin-scc-wrapper — Rapid7의 공급업체 패치 분석을 바탕으로 한 축약 예시
# 축약 예시: remoteVersion은 상대가 제공한다.
read -r remoteVersion || exit 1
if [[ "$localVersion" -lt "$remoteVersion" ]]; then
version=$localVersion
else
version=$remoteVersion
fi
# 산술 비교 전에 예상하지 못한 입력을 거부한다.
read -r remoteVersion || exit 1
if [[ ! "$remoteVersion" =~ ^[0-9]{1,2}$ ]]; then
exit 1
fi
if [[ "$localVersion" -lt "$remoteVersion" ]]; then
version=$localVersion
else
version=$remoteVersion
fi
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓자동 업데이트가 없는 자체 호스팅 시스템을 포함해 모든 Remote Support 및 Privileged Remote Access appliance를 목록화하세요.
- ✓BT26-02-RS를 적용하거나 Remote Support를 25.3.2 이상으로 업그레이드하세요. BT26-02-PRA를 적용하거나 Privileged Remote Access를 25.1.1 이상으로 업그레이드하고 현재 BeyondTrust 권고에서 정확한 절차를 확인하세요.
- ✓2026년 2월 9일까지 인터넷에 노출된 채 패치되지 않았던 자체 호스팅 시스템은 BeyondTrust의 사고 대응 지침에 따라 무단 접근, 지속성, 권한 상승, 데이터 접근을 조사하세요.
- ✓네트워크 및 애플리케이션 텔레메트리에서 예상치 못한 WebSocket 세션과 서비스 계정이 실행한 비정상 하위 프로세스 또는 명령을 확인하고 appliance의 정상 동작과 비교하세요.
- ✓모든 shell 경계에서 숫자 비교 전에 엄격한 허용 목록으로 프로토콜 필드를 검증하세요. 신뢰할 수 없는 텍스트를 Bash 산술,
eval, 명령 문자열에 전달하지 마세요. - ✓비어 있거나 지나치게 길거나 부호·공백·비십진 문자가 포함된 버전 값에 대한 회귀 테스트를 추가하고 비교나 프로세스 시작 전에 거부되는지 확인하세요.