PraisonAI: 불완전한 수정 버전 후에도 AgentOS가 인증되지 않은 상태로 유지되며 원격 에이전트 호출을 허용합니다.
PraisonAI의 AgentOS FastAPI 배포 표면은 인증되지 않은 상태로 남아 있습니다.
현재 메인 및 게시된 패치 버전 이후의 릴리스
'GHSA-pm96-6xpr-978x' / 'CVE-2026-40151'.
공개 AgentOS 권고는 지침 공개 문제로 게시되었습니다.
영향을 받는 버전 < 4.5.128 및 패치 버전 4.5.128이 포함됩니다. 그러나,
v4.5.128, 최신 릴리스 v4.6.57 및 현재 메인 스틸 레지스터
인증 없이 GET /api/agents 및 POST /api/chat. 채팅 경로
agent.chat(request.message)를 직접 호출합니다. 인증 없음 및 잘못된 전달자 요청
둘 다 배포된 에이전트를 실행합니다.
이는 수동적 메타데이터 공개보다 더 광범위합니다. 어떤 배포 환경에서도 AgentOS는 도구, 개인 컨텍스트, 메모리, API 통합으로 에이전트를 래핑합니다. 비용 부담 모델 호출이 발생하면 인증되지 않은 연결 가능한 클라이언트가 이러한 호출을 유도할 수 있습니다. 대리인.
MervinPraison/PraisonAIpraisonaisrc/praisonai/praisonai/app/agentos.pysrc/praisonai-agents/praisonaiagents/app/config.pyGHSA-pm96-6xpr-978x /
'CVE-2026-40151'동적으로 영향을 받는 것으로 확인되었습니다.
-v4.5.126
v4.5.128(GHSA-pm96-6xpr-978x에 대한 패치 버전 게시)
-v4.6.9v4.6.10
-v4.6.56v4.6.572f9677abb2ea68eab864ee8b6a828fd0141612e1정적 소스 검토 결과 동일한 인증되지 않은 경로 패턴이 발견되었으며
v4.2.1에서는 0.0.0.0이 기본값입니다.
제안된 영향 범위: >= 4.2.1, <= 4.6.57.
AgentOSConfig / AgentAppConfig는 기본적으로 배포 호스트를 모두로 설정합니다.
인터페이스가 있으며 인증 필드가 없습니다.
``파이썬 name: str = "PraisonAI 앱" 호스트: str = "0.0.0.0" 포트: int = 8000 api_prefix: str = "/api"
`AgentOS._register_routes()`는 공개 에이전트 메타데이터 및 채팅 경로를 등록합니다.
미들웨어, 종속성, API 키 확인, 무기명 토큰 확인 또는 시작 없이
페일클로즈 가드:
``파이썬
@app.get(f"{self.config.api_prefix}/agents")
비동기 def list_agents():
{"에이전트": [...]}를 반환합니다.
@app.post(f"{self.config.api_prefix}/chat", response_model=ChatResponse)
비동기 def 채팅(요청: ChatRequest):
...
응답 = Agent.chat(request.message)
잘못된 'Authorization' 헤더는 경로에서 검사하지 않으므로 무시됩니다.
현재 메인에는 'from praisonai import AgentOS' 루트 내보내기 버그도 있습니다.
'ImportError'가 발생하지만 문제가 완화되지는 않습니다. 같은 수업
'from praisonai import AgentApp'을 통해 계속 연결할 수 있으며
praisonai.app에서 AgentOS 가져오기.
PraisonAI의 보안 문서에 따르면 API 서버는 익명으로 강화되었습니다.
요청은 401을 반환하고 기본 바인딩은 0.0.0.0에서 다음으로 변경되었습니다.
이전에 인증되지 않은 API 서버 클래스 뒤에 127.0.0.1이 있습니다.
API 서버 인증 문서에는 베어러 인증이 기본적으로 활성화되어 있다고 나와 있습니다. 프로덕션에서는 인증을 비활성화하는 것이 권장되지 않으며 '0.0.0.0'을 사용해야 합니다. 인증 프록시 뒤에만 있습니다.
로컬 PoV에는 생성된 배포 API에 대한 강화된 형제 제어가 포함됩니다. 현재 메인에. 다음을 반환합니다.
401401200AgentOS는 제어 플레인 외부에 남아 있으며 여전히 인증 없음을 허용하고
잘못된 전달자 /api/chat 요청.
PoV는 로컬 전용입니다. FastAPI의 in-process 테스트 클라이언트인 스텁 에이전트를 사용합니다. 임시 파일 부작용. 네트워크 수신기를 시작하지 않습니다. LLM 제공업체에 문의하거나 외부 서비스에 문의하세요.
명령:
``배쉬
env PYTHONPATH="artifacts/repos/praisonai-current/src/praisonai:artifacts/repos/praisonai-current/src/praisonai-agents"
uv 실행 --fastapi 사용 --httpx 사용 --플라스크 사용 --Flask-cors 사용
--pydantic 사용 --입력 확장 사용 --풍부한 사용 --python-dotenv 사용
제출-번들/praisonai-prai-cand-007-agentos-incomplete-auth-fix/poc/prai_cand_007_agentos_incomplete_auth_fix.py
--repo 아티팩트/repos/praisonai-current
--레이블 현재 헤드
현재 헤드 결과 요약:
``json
{
"설명": "v4.6.57-4-g2f9677ab",
"머리": "2f9677abb2ea68eab864ee8b6a828fd0141612e1",
"agentos_vulnerable": 사실,
"진입점": [
{
"entrypoint": "agentapp_alias",
"상태": [200, 200, 200],
"side_events": ["no-auth-marker", "wrong-bearer-marker"]
},
{
"entrypoint": "direct_agentos",
"상태": [200, 200, 200],
"side_events": ["no-auth-marker", "wrong-bearer-marker"]
}
],
"deploy_api_control": {
"control_passed": 사실,
"상태": [401, 401, 200]
}
}
세 가지 AgentOS 상태는 다음과 같습니다.
GET /api/agents;POST /api/chat;POST /api/chat.부작용 목록은 인증되지 않은 채팅 요청이 모두 호출되었음을 증명합니다. 에이전트 방법.
최소 인라인 재현기:
``파이썬 pathlib import 경로에서 tempfile import TemporaryDirectory에서
fastapi.testclient에서 TestClient 가져오기 praisonai에서 AgentApp 가져오기 praisonaiagents에서 AgentOSConfig 가져오기
클래스 StubAgent: 이름 = "pov_agentos_agent" 역할 = "테스터" instruction = "개인 명령 마커"
def __init__(self, out):
self.out = 아웃
데프 채팅(본인, 메시지):
self.out.write_text(self.out.read_text() + 메시지 + "\n")
"PRAI_CAND_007_AGENTOS_EXECUTED:" + 메시지 반환
TemporaryDirectory()를 tmp로 사용: side_ effect = 경로(tmp) / "side_efficents.txt" 부작용.write_text("") 앱 = AgentApp( 에이전트=[StubAgent(부작용)], config=AgentOSConfig(host="0.0.0.0", 포트=8000), ) 클라이언트 = TestClient(app.get_app())
client.get("/api/agents").status_code == 200 주장
client.post("/api/chat", json={"message": "no-auth"}).status_code == 200 주장
클라이언트.포스트(
"/api/채팅",
headers={"Authorization": "Bearer가 확실히 잘못되었습니다."},
json={"message": "잘못된 전달자"},
).status_code == 200
주장 side_ effect.read_text().splitlines() == ["no-auth", "wrong-bearer"]
## 버전 스윕
| 대상 | 결과 |
| --- | --- |
| `v4.5.126` | 취약한 |
| `v4.5.128` | 취약한 |
| `v4.6.9` | 취약한 |
| `v4.6.10` | 취약한 |
| `v4.6.56` | 취약한; 생성된 배포 API 컨트롤이 `401/401/200`을 반환 |
| `v4.6.57` | 취약한; 생성된 배포 API 컨트롤이 `401/401/200`을 반환 |
| 현재 `2f9677abb` | 취약한; 생성된 배포 API 컨트롤이 `401/401/200`을 반환 |
증거 파일은 번들의 `evidence/` 디렉토리에 로컬로 보관됩니다.
유용한 경우 제공될 수 있습니다.
## 중복/불완전 수정 메모
이 보고서는 'GHSA-pm96-6xpr-978x' / 'CVE-2026-40151'과 관련이 있습니다. 는
게시된 권고에서는 AgentOS 지침 공개 및 목록을 설명합니다.
'4.5.128'이 패치되었습니다. 또한 인증되지 않은 `/api/chat`을 체인으로 언급합니다.
명령어 추출 경로.
현재 보고서는 불완전한 수정/영향을 받는 범위로 처리되어야 합니다.
더 광범위하게 입증된 영향을 미치는 수정:
- 게시된 패치 버전 'v4.5.128'이 여전히 재현됩니다.
- 최신 릴리스 'v4.6.57'은 여전히 재현됩니다.
- 현재 메인은 여전히 재현됩니다.
- PoV는 승인되지 않은 에이전트 호출 및 부작용을 입증할 뿐만 아니라
지시 공개.
이는 비공개 'PRAI-CAND-003' / 'GHSA-x8cv-xmq7-p8xp'와는 다릅니다.
`praisonaiagents.AgentTeam.launch()` 경로를 다룹니다. 이 보고서는 다음과 같은 내용을 다룹니다.
`praisonai.app.AgentOS` 및 `AgentApp` 별칭 경로.
## 영향
운영자가 연결 가능한 인터페이스에 AgentOS 앱을 노출하는 경우 모든 클라이언트는
도달할 수 있습니다:
- `GET /api/agents`를 통해 배포된 에이전트를 열거합니다.
- 상담원 이름, 역할 및 지침 스니펫을 읽습니다.
- `POST /api/chat`을 통해 기본 에이전트 또는 명명된 에이전트를 호출합니다.
- 다운스트림 도구, 개인 컨텍스트 읽기, 메모리 액세스, API 트리거
에이전트에 연결된 통합, 브라우저 작업 또는 기타 부작용
- 반복 호출을 통해 모델/API 예산을 소비합니다.
정확한 다운스트림 영향은 배포된 에이전트에 따라 다릅니다. 프레임워크 수준
경계 오류는 프로덕션 배포 표면이 에이전트 제어를 노출한다는 것입니다.
인증 없이 기본적으로 모든 인터페이스에 바인딩됩니다.
## 제안된 수정 사항
생성된 API 배포에 이미 적용된 동일한 보안 모델을 사용합니다.
- `AgentOSConfig` / `AgentAppConfig`에 인증 필드를 추가합니다.
- 기본 인증은 활성화되어 있습니다.
- 기본적으로 호스트를 `127.0.0.1`에 바인딩합니다.
- `GET /api/agents`에 대한 인증 없음 및 잘못된 전달자 요청을 거부하고
`POST /api/chat`;
- 인증이 구성되거나 명시적이지 않은 경우 루프백이 아닌 바인딩에 대해 실패 시 닫힘
안전하지 않은 개발 거부가 설정되었습니다.
- 인증되지 않은 메타데이터 끝점에서 명령 텍스트를 반환하지 마세요.
- 인증 없음, 잘못된 전달자, 올바른 전달자 및 외부에 대한 회귀 테스트를 추가합니다.
인증 없이 바인딩합니다.
유지관리자는 수정된 영향을 받은 'GHSA-pm96-6xpr-978x'를 업데이트할 수 있습니다.
범위 및 더 넓은 영향을 미치거나 별도의 불완전 수정 권고를 게시합니다.
## 권장 심각도
제안된 심각도: 심각.
중요 점수는 인증되지 않은 에이전트 제어 모델인 네트워크와 일치합니다.
공격자, 낮은 복잡성, 권한 없음, 사용자 상호 작용 없음, 높음
에이전트가 도구, 개인 데이터,
또는 비용 부담 서비스. 유지관리자가 최소한의 도구 없는 데모만 점수를 매긴 경우
에이전트의 경우 영향은 더 낮을 수 있지만 현재 기본 프레임워크 동작은 다음과 같습니다.
여전히 인증되지 않은 에이전트 호출입니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 98.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 98.00 |
VPI 공식 vpi-v1 기준