서론
PraisonAI는 여러 AI 에이전트와 도구, 배포 기능을 묶어 빠르게 에이전트 서비스를 구성할 수 있게 해주는 프레임워크다. 이런 도구는 실험 단계에서는 개발자 노트북이나 PoC 서버에서 실행되지만, 운영 단계로 넘어가면 API 서버, CI/CD 파이프라인, 컨테이너 이미지, 모델 제공자 API 키와 연결된다. 그래서 PraisonAI의 배포 기능 취약점은 단순한 개발 도구 버그가 아니라 AI 에이전트 실행 환경과 공급망 보안 문제로 이어질 수 있다.
CVE-2026-61444는 PraisonAI 4.6.78 미만에서 발생하는 코드 인젝션 취약점이다. 문제의 핵심은 deploy/api.py가 서버 코드를 생성할 때 agents_file 값을 f-string에 직접 삽입하고, 생성된 Python 파일을 subprocess.Popen()으로 실행한다는 점이다. 공격자가 agents_file 값을 제어할 수 있으면 문자열 문맥을 깨고 임의 Python 코드를 삽입할 수 있다. NVD와 VulnCheck 기준 CVSS v4.0 점수는 9.4 Critical, CVSS v3.1 점수는 9.1 Critical로 평가됐다.
다만 이 취약점은 "아무나 인터넷에서 바로 호출 가능한 무인증 RCE"로 단정하면 안 된다. CVSS v3.1 벡터의 PR:H가 보여주듯, 공격자가 취약한 배포 명령이나 배포 API의 agents_file 값을 바꿀 수 있는 높은 권한 또는 그에 준하는 제어권을 가져야 한다. 그러나 CI/CD 설정, 내부 배포 포털, 자동 생성된 PraisonAI deploy API, 공유 개발 서버처럼 agents_file 값이 외부 입력이나 저장소 설정에서 흘러 들어가는 구조라면 위험도는 크게 올라간다.
본론
취약점 개요
| 항목 | 내용 |
|---|---|
| CVE ID | CVE-2026-61444 |
| 제품 | PraisonAI |
| 영향 패키지 | PyPI praisonai |
| 취약점 유형 | Code Injection |
| CWE | CWE-94 |
| 영향 파일 | src/praisonai/praisonai/deploy/api.py |
| 관련 입력값 | agents_file |
| 영향 버전 | PraisonAI 4.6.78 미만 |
| 패치 버전 | PraisonAI 4.6.78 이상 |
| CVSS v4.0 | 9.4 Critical, CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H |
| CVSS v3.1 | 9.1 Critical, CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H |
| 주요 영향 | PraisonAI deploy 실행 계정 권한의 임의 코드 실행, 배포 파이프라인 오염, 비밀정보 유출 |
GitHub Security Advisory GHSA-g6j7-pffp-8whg는 취약한 버전을 <= 4.6.77, 패치 버전을 >= 4.6.78로 정리한다. NVD의 CVE-2026-61444 레코드도 VulnCheck CNA 정보를 받아 PraisonAI 4.6.78 미만을 영향 버전으로 표시한다. 따라서 운영팀은 "4.6.78 이전" 또는 "4.6.78 미만"을 기준으로 점검하면 된다.
이 취약점은 PraisonAI 생태계에서 반복적으로 보고된 "동적 코드 로딩", "도구 파일 자동 실행", "기본 노출 API" 문제의 연장선에 있다. PraisonAI는 에이전트 설정과 도구 파일을 빠르게 연결하는 사용성을 제공하지만, 이 경로가 검증되지 않은 입력과 만나면 코드 실행 경계가 흐려진다. CVE-2026-61444는 특히 배포용 서버 코드 생성 단계에서 그 문제가 드러난 사례다.
기술적 분석
취약한 흐름은 단순하다. deploy/api.py는 PraisonAI 서버 코드를 문자열 템플릿으로 생성한다. 이때 agents_file 값이 Python 문자열 리터럴 안에 직접 들어간다.
code = f'''...
praisonai = PraisonAI(agent_file="{agents_file}")
...
"agent_file": "{agents_file}"
...'''
그 뒤 생성된 서버 파일이 다음과 같은 방식으로 실행된다.
subprocess.Popen(["python", server_file])
문제는 agents_file 값이 안전한 파일 경로인지 확인되지 않고, Python 코드에 삽입되기 전에 이스케이프나 직렬화도 거치지 않는다는 점이다. 공격자가 큰따옴표와 Python 문장을 섞은 값을 넣으면 생성되는 서버 코드의 의미가 바뀐다. 예를 들어 방어 관점에서 단순화하면 다음과 같은 구조가 된다.
정상 입력:
agents_file = "agents.yaml"
생성 코드:
PraisonAI(agent_file="agents.yaml")
악성 입력:
agents_file = "\"); import os; os.system(\"id\"); #"
생성 코드:
PraisonAI(agent_file=""); import os; os.system("id"); #")
본문에는 재현 가능한 공격 절차를 자세히 싣지 않는 것이 안전하다. 운영자가 알아야 할 핵심은 "파일 경로로 취급되어야 할 값이 코드 문자열로 직접 합쳐지고, 그 결과물이 별도 Python 프로세스로 실행된다"는 점이다. 방어 코드에서는 f-string으로 코드를 조립하지 말고, 데이터는 json.dumps()나 안전한 AST/템플릿 처리로 문자열 리터럴화하거나, 애초에 생성 코드에 사용자 제어값을 삽입하지 않는 구조로 바꿔야 한다.
GitHub advisory는 같은 패턴이 deploy/docker.py의 Dockerfile 생성 경로에도 존재한다고 언급한다. 이 부분은 직접 Python 프로세스 실행과 영향 방식이 다를 수 있지만, 배포 산출물을 생성하는 과정에서 검증되지 않은 agents_file 값이 삽입된다는 점은 동일하다. 따라서 패치 여부를 확인할 때 deploy/api.py만 보지 말고 PraisonAI deploy 기능 전체를 함께 점검해야 한다.
공격 전제조건과 현실적 위험
CVSS 벡터상 이 취약점은 네트워크 공격 벡터와 높은 권한 요구 조건이 함께 표시된다. 즉, 취약한 PraisonAI 배포 기능이 네트워크를 통해 호출될 수 있더라도, 공격자는 agents_file을 바꿀 수 있는 권한을 확보해야 한다. 이 조건 때문에 무작위 인터넷 스캔만으로 즉시 대량 침해가 발생하는 유형과는 다르게 봐야 한다.
하지만 다음 환경에서는 실제 위험이 높다.
| 우선순위 | 환경 | 위험 해석 |
|---|---|---|
| Critical | PraisonAI deploy API 또는 내부 배포 포털이 네트워크에 노출된 환경 | 권한 있는 계정 탈취, API 토큰 유출, 약한 접근 제어와 결합되면 원격 코드 실행으로 이어질 수 있다. |
| Critical | CI/CD에서 저장소 설정값이나 PR 입력값으로 agents_file을 구성하는 환경 |
공급망 공격자가 배포 파이프라인에서 코드 실행을 얻을 수 있다. |
| High | 공유 개발 서버에서 여러 사용자가 PraisonAI 설정 파일을 수정할 수 있는 환경 | 한 사용자의 설정 조작이 서비스 계정 권한 실행으로 확대될 수 있다. |
| High | 모델 API 키, 클라우드 키, 데이터베이스 접속 정보가 배포 환경 변수에 있는 환경 | 코드 실행 성공 시 환경 변수와 배포 비밀정보 유출 가능성이 커진다. |
| Medium | 로컬 단일 사용자 실험 환경 | 외부 공격면은 제한적이지만, 신뢰하지 않는 agents 파일이나 템플릿을 받아 실행하면 위험하다. |
특히 AI 에이전트 프레임워크는 "설정 파일도 코드처럼 실행된다"는 특성이 강하다. agents.yaml, tool 파일, recipe, deploy 옵션이 서로 연결되고, 일부 값은 LLM이나 자동화 시스템이 생성하기도 한다. 이 구조에서 agents_file이 단순 파일명이라고 믿고 검증하지 않으면, 코드 생성 단계가 공격 표면이 된다.
점검 포인트
먼저 실제 실행 중인 PraisonAI 버전을 확인한다. 개발자 로컬, 빌드 서버, 컨테이너 이미지, 노트북 서버, 배포 자동화 계정이 서로 다른 버전을 사용할 수 있으므로 한 곳만 보면 안 된다.
python -m pip show praisonai
python -c "import praisonai; print(getattr(praisonai, '__version__', 'unknown'))"
pip freeze | grep -i praisonai
docker images | grep -i praison
그 다음 PraisonAI deploy 기능 사용 여부를 확인한다.
점검 대상
- `praisonai deploy` 명령 사용 여부
- `deploy/api.py` 또는 생성된 API 서버 실행 여부
- 내부 배포 포털에서 `agents_file`, `agent_file`, `config`, `recipe` 값을 받는지 여부
- CI/CD workflow, Jenkinsfile, GitHub Actions, GitLab CI에서 PraisonAI deploy 호출 여부
- 컨테이너 이미지 빌드 단계에서 `deploy/docker.py` 또는 유사 Dockerfile 생성 기능 사용 여부
소스와 파이프라인에서는 다음 패턴을 찾는다.
rg -n "praisonai deploy|agents_file|agent_file|deploy/api.py|deploy/docker.py" .
rg -n "PraisonAI\\(agent_file=|subprocess\\.Popen|subprocess\\.run" .
로그에서는 agents_file 값이 평소와 다른지, 경로가 아니라 Python 구문처럼 보이는 문자가 들어갔는지 확인한다.
의심 신호
- `agents_file` 값에 `import`, `os.`, `subprocess`, `eval`, `exec`, `__import__` 문자열 포함
- 파일 경로 입력값에 큰따옴표, 작은따옴표, 세미콜론, 주석 문자(`#`)가 포함
- deploy 직후 예기치 않은 외부 통신, 신규 프로세스, 임시 파일 생성 발생
- 배포 계정의 환경 변수, API 키, SSH 키, 클라우드 자격증명 접근 흔적
- CI/CD 로그에 `agents_file` 값이 PR, issue, 외부 저장소, 사용자 입력에서 유입된 흔적
대응 전략
즉시 조치
- PraisonAI를 4.6.78 이상으로 업데이트한다.
- PraisonAI deploy API, 내부 배포 포털, 생성된 API 서버가 외부 또는 넓은 내부망에 노출되어 있는지 확인한다.
agents_file을 사용자 입력, API 요청, 저장소 설정, CI/CD 변수에서 받는 경로를 식별한다.- 취약 버전에서 deploy 기능을 사용했다면 최근 배포 로그와 CI/CD 로그를 보존한다.
- 의심 입력이 확인되면 해당 배포 계정의 모델 API 키, 클라우드 키, 저장소 토큰, 패키지 레지스트리 토큰을 회전한다.
24시간 이내 조치
- 배포 기능 접근 권한을 최소화하고, 관리자 또는 전용 서비스 계정만 호출할 수 있게 제한한다.
agents_file값은 고정된 프로젝트 디렉터리 안의.yaml또는.yml파일만 허용하도록 검증한다.- CI/CD에서 외부 PR, issue body, branch name, workflow input이
agents_file로 직접 연결되지 않게 차단한다. - 생성된 API 서버와 컨테이너 이미지에 취약 버전 PraisonAI가 포함되어 있는지 SBOM 또는 이미지 스캔으로 확인한다.
- 배포 계정의 네트워크 egress를 제한해 코드 실행이 발생해도 외부 유출 경로를 줄인다.
1주 이내 조치
- AI 에이전트 프레임워크를 정식 자산 목록과 취약점 관리 대상에 포함한다.
agents.yaml, tools, recipe, deploy 설정을 코드 리뷰와 변경 승인 대상에 넣는다.- 배포 파이프라인에서 비밀정보를 장기 환경 변수로 두지 말고, 짧은 수명의 토큰과 secrets manager를 사용한다.
- PraisonAI 외에도 LangChain, CrewAI, AutoGen, 자체 agent runner의 동적 코드 생성·로딩 경로를 점검한다.
- AI agent 배포 환경에 대한 런타임 탐지 규칙을 만든다. 예기치 않은 shell 실행, Python 자식 프로세스, 외부 통신, 민감 파일 접근을 함께 본다.
운영 체크리스트
| 우선순위 | 구분 | 점검 항목 | 권장 조치 | 담당 |
|---|---|---|---|---|
| Critical | 패치 | praisonai 4.6.78 미만 사용 여부 |
4.6.78 이상 업데이트 | DevOps/플랫폼 |
| Critical | 노출 | PraisonAI deploy API 또는 생성 서버 접근 범위 | VPN, ZTNA, IP allowlist, 인증 강화 | 네트워크/보안 |
| Critical | 입력 검증 | agents_file이 외부 입력에서 유입되는지 여부 |
고정 디렉터리와 확장자 allowlist 적용 | 애플리케이션 보안 |
| High | CI/CD | PR, workflow input, 저장소 설정값이 deploy 인자로 연결되는지 여부 | 비신뢰 입력 차단, 승인된 값만 사용 | DevSecOps |
| High | 비밀정보 | 배포 계정 환경 변수와 토큰 노출 가능성 | 의심 시 즉시 회전, secrets manager 사용 | 서비스 운영 |
| Medium | 로그 | deploy 실행 로그와 생성 서버 실행 로그 보존 여부 | 최소 30일 이상 보존, SIEM 연동 | 보안관제 |
| Medium | 런타임 | deploy 실행 중 비정상 자식 프로세스 발생 여부 | EDR, 컨테이너 런타임 탐지 규칙 적용 | SOC/IR |
| Low | 거버넌스 | AI 에이전트 설정 파일 변경 관리 여부 | 코드 리뷰, 소유자 지정, 변경 이력 관리 | 보안기획 |
탐지 아이디어
EDR이나 컨테이너 런타임 탐지를 사용하는 조직은 PraisonAI deploy 프로세스의 자식 프로세스 생성 패턴을 기준으로 룰을 만들 수 있다. 정상 배포 과정에서도 Python 프로세스가 생성될 수 있으므로, 단순히 python 실행만으로 경보를 만들기보다 인자, 부모 프로세스, 실행 위치, 네트워크 통신을 함께 봐야 한다.
상관분석 예시
1. 부모 프로세스가 PraisonAI deploy 또는 생성된 server_file 실행이다.
2. 직후 `sh`, `bash`, `curl`, `wget`, `python -c`, `nc` 같은 프로세스가 생성된다.
3. 같은 시간대에 외부 IP로 outbound 연결이 발생한다.
4. 배포 계정이 환경 변수, 홈 디렉터리의 `.ssh`, 클라우드 credential 파일에 접근한다.
5. CI/CD job 로그에 비정상 `agents_file` 값 또는 실패한 Python syntax error가 남는다.
웹/API 로그에서는 deploy 관련 엔드포인트가 있다면 요청 본문과 호출자 정보를 함께 남겨야 한다. 단, agents 파일 경로나 환경 변수에 민감 정보가 섞일 수 있으므로 로그 마스킹 정책을 병행한다.
AI 에이전트 배포 보안 관점
CVE-2026-61444는 AI 에이전트 배포에서 입력값 경계가 얼마나 쉽게 흐려지는지 보여준다. 일반 웹 애플리케이션에서는 "사용자 입력을 코드로 만들지 말라"는 원칙이 오래전부터 알려져 있다. 하지만 에이전트 프레임워크에서는 설정 파일, tool 정의, recipe, prompt, deploy 옵션이 모두 실행 흐름에 영향을 주기 때문에 같은 원칙을 더 엄격하게 적용해야 한다.
첫째, agent 설정 파일은 데이터가 아니라 실행 권한을 가진 배포 산출물로 취급해야 한다. agents.yaml이 어떤 tool을 불러오고 어떤 API 키를 사용할 수 있는지에 따라 실제 권한이 달라진다.
둘째, 배포 계정은 최소 권한이어야 한다. PraisonAI deploy가 성공하더라도 그 계정이 전체 클라우드 관리자 권한, 모든 저장소 쓰기 권한, 장기 모델 API 키를 갖고 있다면 코드 인젝션의 피해가 크게 커진다.
셋째, 내부 도구라는 이유로 인증과 로그를 생략하면 안 된다. PraisonAI 관련 취약점들은 기본 설정, 예제 서버, 내부 API, 도구 로딩 경로에서 반복적으로 나왔다. 내부망 노출은 공격자가 한 번 침투한 뒤 횡적으로 이동할 때 충분한 공격면이 된다.
넷째, 패치만으로 끝내지 말고 입력 검증 구조를 확인해야 한다. 4.6.78 이상으로 올리는 것이 1차 조치지만, 조직 내부 wrapper나 자체 배포 포털이 같은 f-string 코드 생성 패턴을 복사해 쓰고 있다면 동일한 취약점이 남을 수 있다.
결론
CVE-2026-61444는 PraisonAI 4.6.78 미만의 deploy API 서버 생성 경로에서 agents_file 값이 f-string에 직접 삽입되어 임의 Python 코드 실행으로 이어질 수 있는 Critical 취약점이다. 공격자는 agents_file 값을 제어할 수 있어야 하므로 모든 인터넷 노출 인스턴스가 즉시 무인증 RCE 상태라고 보기는 어렵다. 그러나 내부 배포 포털, CI/CD, 공유 개발 서버, 자동화된 agent 배포 환경에서는 이 조건이 현실적으로 충족될 수 있다.
실무 대응의 우선순위는 명확하다. 첫째, PraisonAI를 4.6.78 이상으로 업데이트한다. 둘째, praisonai deploy, 생성 API 서버, agents_file 입력 경로가 어디에 있는지 확인한다. 셋째, 배포 계정의 권한과 비밀정보를 줄이고, 의심스러운 deploy 실행이 있었다면 토큰 회전과 로그 조사를 진행한다.
AI 에이전트 보안은 모델 프롬프트만의 문제가 아니다. agent 설정, tool 로딩, deploy 코드 생성, CI/CD 변수, 비밀정보 관리가 모두 하나의 실행 경로를 만든다. CVE-2026-61444는 AI agent 배포 도구도 일반 애플리케이션 보안의 기본 원칙, 즉 입력 검증, 코드와 데이터의 분리, 최소 권한, 로그 수집을 그대로 따라야 한다는 신호다.
참고자료
-
NVD CVE-2026-61444
https://nvd.nist.gov/vuln/detail/CVE-2026-61444 -
GitHub Security Advisory GHSA-g6j7-pffp-8whg
https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-g6j7-pffp-8whg -
VulnCheck Advisory: PraisonAI before 4.6.78 Code Injection via f-string
https://www.vulncheck.com/advisories/praisonai-before-code-injection-via-f-string -
PraisonAI Security Documentation
https://praison.ai/docs/security -
Sysdig: CVE-2026-44338 PraisonAI authentication bypass exploitation timing
https://www.sysdig.com/blog/cve-2026-44338-praisonai-authentication-bypass-in-under-4-hours-and-the-growing-trend-of-rapid-exploitation
본 콘텐츠는 AI 기술로 생성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하시면 댓글을 통해 소중한 의견 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!