npm PraisonAI AgentOS는 인증되지 않은 에이전트 목록 및 호출을 노출합니다.
게시된 npm 패키지 praisonai는 기본적으로 host: "0.0.0.0"으로 설정되는 TypeScript AgentOS HTTP 서버를 제공하며 인증 또는 권한 부여 미들웨어 없이 민감한 에이전트 경로를 등록합니다.
개발자가 AgentOS를 시작하면 서비스에 접근할 수 있는 네트워크 공격자는 다음을 수행할 수 있습니다.
GET /api/agents를 통해 구성된 에이전트 이름, 역할 및 각 에이전트 지침의 처음 100자를 읽습니다. 그리고POST /api/chat을 통해 선택한 에이전트를 호출합니다.이는 기존 Python/PyPI AgentOS 및 API 서버 권고와는 다릅니다. 여기서 영향을 받는 패키지는 npm:praisonai입니다. 현재 게시된 npm 패키지는 1.7.1이고 동일한 TypeScript 소스가 v4.6.58의 새로 고쳐진 origin/main에 여전히 존재합니다.
AgentOSConfig는 호스트, CORS 및 API 접두사 설정을 노출하지만 인증 토큰, 인증 모드 또는 승인 콜백은 노출하지 않습니다.
관련 전류 헤드 소스:
``텍스트 src/praisonai-ts/src/os/config.ts 26: 호스트?: 문자열; // 기본값: "0.0.0.0" 35: corsOrigins?: 문자열[]; // 기본값: [""] 66: const DEFAULT_AGENTOS_CONFIG = { 내보내기 68: 호스트: '0.0.0.0', 71: corsOrigins: [''],
`AgentOS._createApp()`은 JSON 구문 분석 및 CORS 처리를 등록한 후 즉시 경로를 등록합니다. API 키, 전달자 토큰, 세션, 원본 바인딩 비밀 또는 기타 자격 증명을 검증하는 경로 등록과 본문 구문 분석 사이에는 미들웨어가 없습니다.
관련 전류 헤드 소스:
``텍스트
src/praisonai-ts/src/os/agentos.ts
179: app.use(express.json());
182: // CORS 미들웨어 추가
204: // 경로 등록
205: this._registerRoutes(앱);
그런 다음 중요한 경로가 노출됩니다.
``텍스트
src/praisonai-ts/src/os/agentos.ts
235: app.get(${apiPrefix}/agents, ...)
240: 지침: Agent.instructions ? ... : null
250: app.post(${apiPrefix}/chat, ...)
273: const 응답 = wait Agent.chat(message);
331: const 호스트 = options.host || this.config.host;
338: this._server = app.listen(포트, 호스트, ...)
기본 호스트는 `0.0.0.0`이므로 `await app.serve({ port: 8000 })`는 개발자가 명시적으로 `host`를 재정의하지 않는 한 모든 인터페이스를 수신합니다.
### 이것이 의도한 동작이 아닌 이유
PraisonAI의 공식 TypeScript 문서에서는 npm 패키지를 프로덕션용 다중 에이전트 프레임워크로 설명하고 사용자에게 'npm install praisonai'를 사용하여 패키지를 설치하도록 지시합니다.
PraisonAI의 보안 문서에는 보안 보고서에 영향을 받는 버전, 영향, 재현 단계 및 제안된 수정 사항이 포함되어야 한다고 명시되어 있으며 GitHub 보안 권고가 선호되는 보고 방법이라고 명시되어 있습니다. 동일한 보안 페이지에는 기본적으로 인증을 요구하고 `0.0.0.0` 대신 `127.0.0.1`에 바인딩하도록 API 서버가 변경된 이전 강화 변경 사항도 문서화되어 있습니다.
TypeScript npm `AgentOS` 구현은 여전히 반대 작업을 수행합니다.
- 기본 바인드 주소는 `0.0.0.0`입니다.
- `AgentOSConfig`에 인증 구성이 없습니다.
- `/api/agents`는 에이전트 메타데이터 및 명령 접두어를 공개합니다. 그리고
- `/api/chat`은 `agent.chat(message)`를 직접 호출합니다.
PoV의 패치 제어 분기는 경로 전 전달자 토큰 미들웨어를 추가하면 동일한 인증되지 않은 요청이 '401'과 함께 실패함을 확인합니다.
## PoV
PoV는 게시된 npm 패키지를 임시 프로젝트에 설치하고, 모의 에이전트를 사용하여 '127.0.0.1'에서 'AgentOS'를 시작한 다음 루프백 HTTP 요청을 보냅니다. 패키지 설치 후에는 LLM 공급자나 외부 서비스를 호출하지 않습니다.
로컬 복제 체크아웃에서 실행:
``물고기
노드 poc/pov_poc.js 1.7.1
관찰 결과:
``json { "버전": "1.7.1", "defaultHost": "0.0.0.0", "에이전트상태": 200, "에이전트바디": { "에이전트": [ { "이름": "금융 관리자", "role": "내부 재무 운영", "instructions": "poc SECRET: 환불 송금 도구는 고객 잔액을 변경할 수 있습니다" } ] }, "채팅상태": 200, "chatBody": { "응답": "에이전트 호출:전송 확인", "agent_name": "재정-관리자" }, "invokedMessages": [ "이체 확인" ] }
취약한 요청에는 'Authorization' 헤더가 전송되지 않습니다.
PoV는 또한 임시 설치된 복사본에 최소 로컬 전용 인증 미들웨어 패치를 적용하고 동일한 요청을 컨트롤로 다시 실행합니다.
``json
{
"patchedNoAuthAgents": 401,
"patchedNoAuthChat": 401,
"patchedWithAuthAgents": 200,
"patchedWithAuthChat": 200
}
이 컨트롤은 PoV가 모의 에이전트의 아티팩트가 아닌 누락된 인증 경계를 실행하고 있음을 보여줍니다.
위의 PoV 섹션에는 로컬 재생 명령, 입력 및 결정적인 출력이 포함됩니다.
실행 중인 TypeScript 'AgentOS' 서버에 접근할 수 있는 공격자는 자격 증명 없이 구성된 에이전트를 호출할 수 있습니다. 실제 영향은 배포된 에이전트에 따라 다르지만 PraisonAI 에이전트는 도구, 메모리, 워크플로 상태, 외부 API, 프로세스 환경의 자격 증명 및 비즈니스 데이터에 액세스할 수 있습니다. 따라서 /api/chat을 통한 무단 프롬프트 삽입은 구성된 에이전트가 연결할 수 있는 다운스트림 시스템의 기밀성과 무결성에 영향을 미칠 수 있습니다.
GET /api/agents는 내부 워크플로 세부 정보를 표시하고 노출된 에이전트에 대한 프롬프트를 맞춤화하는 데 도움이 될 수 있는 에이전트 이름, 역할 및 지침 접두사도 공개합니다.
이 보고서는 기본적으로 임의 코드 실행을 주장하지 않습니다. 배포된 에이전트에 코드, 파일, 브라우저, MCP 또는 비즈니스 운영 도구가 있는 경우 인증되지 않은 호출 끝점이 해당 도구 부작용의 진입점이 될 수 있습니다.
제안된 심각도: 심각.
근거:
AV: 취약한 구성 요소는 HTTP 서비스이며 기본적으로 모든 인터페이스 바인딩입니다.AC: 공격은 직접적인 HTTP 요청입니다.PR: 자격 증명이 필요하지 않습니다.UI: 서버 실행 후 사용자 상호작용이 필요하지 않습니다.S: 영향이 취약한 서비스와 구성된 에이전트의 권한 내에 있습니다.C: /api/agents는 지침을 노출하고 /api/chat은 에이전트가 연결할 수 있는 데이터를 유도할 수 있습니다.I: /api/chat을 사용하면 인증되지 않은 호출자가 에이전트/도구 작업을 수행할 수 있습니다.권장되는 최소 수정 사항:
AgentOSConfig에 인증 구성(예: authToken, authRequired 또는 authorize(req) 콜백)을 추가합니다.0.0.0.0에서 127.0.0.1로 변경합니다./, /api/agents, /api/chat, /api/teams 및 /api/flows를 포함하여 모든 비상태 경로 전에 인증 미들웨어를 등록합니다.GET /api/agents는 401을 반환합니다.POST /api/chat은 401을 반환하고 agent.chat을 호출하지 않습니다.serve({ 포트 })는 루프백에 바인딩되거나 인증이 구성되지 않은 경우 실패 처리됩니다.MervinPraison/PraisonAInpmpraisonai1.7.1src/praisonai-ts/src/os/agentos.tssrc/praisonai-ts/src/os/config.ts1ad58ca02975ff1398efeda694ea2ab78f20cf3e (v4.6.58)영향을 받는 것으로 확인된 npm 버전:
``텍스트
= 1.6.0, <= 1.7.1
경계:
``텍스트
<= 1.5.4는 npm tarball에 dist/os/agentos.js를 제공하지 않았습니다.
이 보고서가 작성되는 시점에는 고정된 npm 버전이 알려져 있지 않습니다.
포함된 스윕은 npm tarball을 다운로드하고 제공된 dist/os 구현을 확인합니다.
``물고기 노드 poc/version_sweep_poc.js
영향을 받는 행:
``텍스트
버전 has_agentos default_host_0_0_0_0 has_api_agents_instructions has_api_chat_agent_invocation has_401_unauthorized_guard comments_authorization_header
1.6.0 참 참 참 참 거짓 참
1.7.0 참 참 참 참 거짓 참
1.7.1 참 참 참 참 거짓 참
'1.5.4'까지의 이전 npm 버전은 'dist/os/agentos.js'를 제공하지 않았습니다.
CORS가 Authorization 헤더를 허용하므로 mentions_authorization_header는 true입니다. 스윕은 401/무단 경로 가드가 없는지 별도로 확인합니다.
확인됨:
'생태계: npm' / '패키지: praisonai'를 대상으로 하는 데이터에 공개 또는 비공개 자문 행이 없습니다.
가장 가까운 관련 권고는 Python/PyPI 범위이며 npm TypeScript 패키지를 다루지 않습니다.
GHSA-pm96-6xpr-978x: PyPI praisonai, Python AgentOS /api/agents를 통한 인증되지 않은 정보 공개, 영향을 받은 <= 4.5.120.GHSA-892r-p3jq-jp24: PyPI praisonai, Python AgentOS 인증되지 않은 원격 에이전트 호출, 영향을 받음 >= 4.2.1, <= 4.6.57.GHSA-6rmh-7xcm-cpxj: PyPI praisonai, 기본적으로 비활성화된 레거시 API 서버 인증 생성, 영향을 받는 >= 2.5.6, <= 4.6.33.GHSA-r7v3-x45f-g7hp / GHSA-7ww9-85pg-cv4x: PyPI praisonai Serve Agent --api-key가 무시되었습니다.이 보고서는 npm 영향을 받는 범위 >= 1.6.0, <= 1.7.1과 함께 npm 패키지와 src/praisonai-ts 아래의 TypeScript 구현에 영향을 미치기 때문에 별도로 추적해야 합니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 94.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 94.00 |
VPI 공식 vpi-v1 기준