🔴 무슨 일이 일어났나
2026년 4월 3일, AI 멀티에이전트 프레임워크 PraisonAI에서 5개의 심각한 보안 취약점이 동시에 공개되었습니다. 가장 위험한 CVE-2026-34938은 CVSS 10.0 만점을 받았습니다.
PraisonAI는 여러 AI 에이전트를 조합해 복잡한 작업을 자동화하는 오픈소스 프레임워크입니다. CrewAI, AutoGen과 함께 에이전트 오케스트레이션 도구로 널리 사용됩니다.
이번에 공개된 취약점은 두 개 패키지에 걸쳐 있습니다.
| CVE | CVSS | 패키지 | 공격 유형 | |-----|------|--------|----------| | CVE-2026-34938 | 10.0 | praisonai-agents (<1.5.90) | 샌드박스 우회 → RCE | | CVE-2026-34935 | 9.8 | praisonai CLI (<4.5.69) | CLI 커맨드 인젝션 | | CVE-2026-34953 | 9.1 | praisonai CLI (<4.5.97) | 인증 우회 | | CVE-2026-34955 | 8.8 | praisonai CLI (<4.5.97) | 샌드박스 탈출 | | CVE-2026-34937 | 7.8 | praisonai-agents (<1.5.90) | 셸 인젝션 |
5개 CVE 중 4개가 CVSS 8.8 이상이며, 모두 인증 없이 원격 코드 실행이 가능합니다.
⚠️ 왜 위험한가
CVSS 10점: 3중 샌드박스가 한 줄로 무너진다
CVE-2026-34938이 만점을 받은 이유는 공격의 단순함 때문입니다.
PraisonAI의 execute_code() 함수는 사용자가 제출한 코드를 실행하기 전에 3단계 보안 검사를 거칩니다. 문제는 이 검사가 Python의 startswith() 메서드에 의존한다는 점입니다.
공격자가 str을 상속한 클래스를 만들어 startswith() 메서드를 오버라이드하면, 보안 검사 자체가 항상 통과됩니다. 3중 보호막이 Python 문자열 상속 한 줄로 완전히 무력화되는 셈입니다. GitHub Security Advisory(GHSA-6vh2-h83c-9294)에서 확인할 수 있습니다.
CVSS 벡터가 이를 잘 보여줍니다. 네트워크 접근만 있으면 되고(AV:N), 공격 난이도는 낮으며(AC:L), 인증도 필요 없고(PR:N), 사용자 상호작용도 없습니다(UI:N). 기밀성·무결성·가용성 모두 완전 손상(C:H/I:H/A:H)입니다.
CLI 커맨드 인젝션: 검증 없는 파이프라인
CVE-2026-34935는 --mcp CLI 인수가 검증, 허용 목록, 새니타이징 없이 그대로 shlex.split()을 거쳐 anyio.open_process()로 전달되는 문제입니다. 공격자가 조작한 입력이 셸 명령으로 직접 실행됩니다.
인증 우회: "토큰이 없으면 통과"
CVE-2026-34953은 가장 황당한 취약점입니다. OAuthManager.validate_token() 함수가 내부 저장소에 없는 토큰에 대해 True를 반환합니다. 기본적으로 저장소는 비어 있으므로, 아무 Bearer 토큰이나 보내면 인증이 통과됩니다.
샌드박스 탈출: 불완전한 차단 목록
CVE-2026-34955는 SubprocessSandbox가 subprocess.run()을 shell=True로 호출하면서, 차단 목록에 sh와 bash를 포함하지 않은 문제입니다. STRICT 모드에서도 sh -c '' 한 줄이면 임의 명령이 실행됩니다.
🎯 나에게 어떤 영향이 있는가
PraisonAI를 직접 사용하지 않더라도 주목해야 할 이유가 있습니다.
직접 영향권에 있는 사용자는 다음과 같습니다.
- PraisonAI로 멀티에이전트 워크플로우를 운영하는 개발자
- PraisonAI 기반 서비스를 외부에 노출한 기업 (MCP 서버 포함)
praisonai-agents패키지를 의존성으로 사용하는 프로젝트
간접적 시사점도 큽니다. 이번 사건은 AI 에이전트 프레임워크의 보안 설계가 얼마나 취약한지를 보여줍니다. execute_code() 같은 코드 실행 기능은 대부분의 에이전트 프레임워크가 제공하지만, 샌드박스 구현의 깊이는 천차만별입니다.
특히 CVE-2026-34953(인증 우회)은 AI 에이전트 프레임워크들이 인증 체계를 얼마나 소홀히 다루는지를 단적으로 보여주는 사례입니다. "토큰이 저장소에 없으면 유효하다"는 로직은 보안 설계의 기본인 "기본 거부(deny by default)" 원칙을 정면으로 위반합니다.
🛡️ 지금 할 수 있는 대응법
-
즉시 업그레이드: 두 패키지 모두 최신 버전으로 업데이트합니다.
praisonai-agents→ 1.5.90 이상praisonaiCLI → 4.5.97 이상pip install --upgrade praisonai praisonai-agents
-
외부 노출 점검: PraisonAI 인스턴스가 인터넷에 직접 노출되어 있다면 즉시 접근을 차단합니다. 특히 MCP 서버 엔드포인트의 인증 설정을 확인합니다.
-
로그 점검: 비정상적인
execute_code()호출, 예상치 못한--mcp인수, 인증되지 않은 API 접근 기록이 있는지 확인합니다. -
코드 실행 기능 감사: PraisonAI 외에도 사용 중인 AI 에이전트 프레임워크의 코드 실행 기능을 점검합니다.
subprocess.run(shell=True)를 사용하는지, 샌드박스가 적절히 구현되어 있는지 확인합니다. -
의존성 스캔 도입:
pip-audit나safety같은 도구로 Python 의존성을 정기적으로 스캔하여 알려진 CVE가 있는 패키지를 조기에 발견합니다.
참고