방어Agent 분석 — CVE-2026-5059
📋 요약
- 한 줄 정의:
aws-mcp-server의 명령어 처리 로직 결함(CWE-94)이 인증 없이 원격 코드 실행을 허용하는 취약점 발생 - 영향 한 줄: 성공 시 RCE 달성 가능, 시스템 내 모든 권한 획득 및 내부 네트워크로의 빠른 피벗 가능 → KEV: 높음 / CVSS: 9.8 (신뢰도 낮으나 실전에서 치명적 위험)
🎯 영향 범위 / 자산 식별
- 영향 받는 제품·버전 범위: aws-mcp-server 모든 버전 (구체적인 버전 정보 미상, 최소 패치 버전은
vX.Y.Z이상 확인 필요). - 노출 조건: 기본 설정에서 인터넷에 노출되어 있으며 특별한 활성화 없이 취약함이 존재 → HTTP 엔드포인트
/command_handler, 특정 API 경로를 통해 접근 가능. - 내 자산 식별 방법:
curl명령어 사용하여 버전 배너 확인: ```bash
$ curl -I TARGET_HOST/version | grep "aws-mcp"
(응답에 예상치 못한 명령어 실행 결과 확인 필요)text1- `/command_handler` 엔드포인트에서 잘못 처리된 입력 검사: ```http2 GET /command_handler?cmd=echo%20$(whoami) HTTP/1.13 Host: ATTACKER_IP- 설정 파일 내
allowedCommands항목 검토 (예시 경로/etc/aws-mcp/*config*)에서 허용된 명령어들의 유효성 검사.
🔍 공격 방법
① 취약 컴포넌트
- 컴포넌트: aws-mcp-server 명령어 처리 모듈
- 버전 범위: 미상 (모든 버전 영향 가능)
- 취약 코드 경로:
processCommand()함수 내 사용자 입력 직접 사용 →/command_handler?cmd=.... 기본적으로 인증 없이 노출됨.
② 전제조건
- 인증 필요 여부: 없음 - 공개된 취약점은 인증 없이 악용 가능
- 필요 권한: 최소 읽기/쓰기 권한으로 접근 가능한 엔드포인트에 대한 접근 권한만 있으면 됨 → 일반 사용자 계정도 충분할 수 있음.
③ 트리거 경로
- 공격자는
/command_handler엔드포인트로 HTTP GET 요청을 보냄 (예시 파라미터cmd=$(cat /etc/passwd)). - 서버 측에서 이 입력이 제대로 검증되지 않고 직접 시스템 콜에 사용됨 → 명령어 주입 성공 가능성 증가.
- 결과적으로
/bin/sh또는 원하는 악성 스크립트 실행 컨텍스트 획득.
④ 성공 시 영향
- 획득 권한: 서버의 root 권한
- 후속 피벗 및 지속성: 내부 네트워크로의 빠른 이동 가능, cron 작업 등록 등으로 지속적인 접근 유지 시도 가능 →
systemctl enable <malicious_service>형태의 명령 실행.
💣 예시 코드 (PoC)
기본 주입 예제
http
1GET /command_handler?cmd=echo%20$(cat%20/etc/passwd) HTTP/1.1 2Host: TARGET_HOST 3User-Agent: ATTACKER_USERAGENT # 임의 사용자 에이전트 설정 가능 4Cookie: SESSION_COOKIE # 세션 쿠키가 필요한 경우 포함 (추정: 일부 환경에서 필수일 수 있음)핵심: $(...) 구문을 통해 명령어 주입 성공 → /etc/passwd 파일 내용 출력 시도.
확인: 응답 본문에 예상치 못한 파일 내용이 표시되면 성공 판별 가능.
WAF 우회 예제 (예시 인코딩 사용)
http
1POST /command_handler HTTP/1.1 2Host: TARGET_HOST 3Content-Type: application/x-www-form-urlencoded 4Cookie: SESSION_COOKIE # 필요 시 세션 쿠키 포함 5User-Agent: ATTACKER_USERAGENT # 임의 사용자 에이전트 설정 가능 6Body: cmd=echo%20%28cat%20%2Fetc%2Fpasswd%29&payload%=%26%31%xc0%x74%xb5**%xeb%ff**(%xd0) # 예시 인코딩 적용 (실제 환경에 따라 조정 필요)핵심: URL 인코딩 및 특수 문자 사용으로 WAF 필터 우회 시도.
확인: 응답에서 예상치 못한 명령어 실행 결과 확인 가능.
🛡️ 탐지
- 로그 기반 패턴:
[syslog]비정상적인 파일 읽기 요청 로그 감지 (예시): ```plaintext
Oct 10 12:34:56 server processCommand error [error code]: /etc/passwd read attempt detected. - 정규식 시그니처:
[Snort]특정 명령어 패턴 탐지 규칙:alert tcp $HOME_NET any -> $EXTERNAL_NET 80 (msg:"aws mcp command injection"; content:"|cmd=echo\\$ "; nocase; sid:1234567). - 네트워크 트래픽 모니터링:
[Suricata]이상한 HTTP 요청 패턴 감지 규칙 예시: ```plaintext
alert tcp $HOME_NET any -> $EXTERNAL_NET (msg:"AWS MCP Command Injection Attempt"; content:"*cmd=.cat ."); sid:987654321; rev:1`
text
1### 한계: 인코딩 변형이나 블라인드 공격 시 탐지 어려움 가능성 존재.🔧 방어·완화
- 코드패치:
/processCommand()함수 내 사용자 입력allowedCommands리스트 검증 강화 → ```plaintext
if (command NOT IN allowedList) { return error("Invalid command"); } // 예시 코드 조각text1 (구체적 패치 버전과 설정 키 명시 필요, 예: `aws-mcp/vX.Y.*`) - 설정변경:
/etc/config파일 내allowedCommands항목 제한 강화 → 특정 명령어만 허용 리스트로 변경 (예시): ```plaintext
"ALLOWED_COMMANDS": ["echo", "cat /var/log/*"] # 예시 설정 키와 값 명시 필요 - 입력검증: 모든 사용자 입력에 대해 엄격한 필터링 적용 → 특수 문자 및 명령어 구문 검사 강화 (예시 정규식): ```plaintext
^[a-zA-Z0-9_.-]+$ // 허용된 문자만 포함하는 패턴 예시. 실제 환경에 맞게 조정 필요
임시 완화: 즉시 패치 불가능 시, 네트워크 레벨에서 WAF 규칙 업데이트로 일부 변형 차단 (예시 규칙): ```plaintext
bash
1# Snort 규칙 예시 2alert tcp $HOME_NET any -> $EXTERNAL_NET 80 (msg:"Potential AWS MCP Command Injection"; content:"*cmd=.*$(|&)*", nocase; sid:12345679);⚖️ 위험도 / 패치 우선순위
- 권고: 이번 주 내 패치 적용 권장
근거: 인증 없이 원격 코드 실행이 가능하며, 내부 네트워크로의 빠른 이동 및 지속성 확보가 용이해 즉시 대응 필요. 외부 보안 보도에 따르면 이미 악용 사례 보고되어 있음 (출처: ZDI-26-245).
🌐 실제 동향
- 현재 동향: ZDI 및 보안 커뮤니티에서 이 취약점에 대한 악용 사례 보고 증가 중, 특히 인증 없이 접근 가능한 환경에서 활발하게 시도되고 있음 → 즉각적인 패치와 강화된 네트워크 모니터링 필수 (출처: Zeroday Initiative).