trustdex 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +391 -0
- package/README.md +39 -7
- package/SECURITY.md +4 -0
- package/bin/trustdex.mjs +24 -1
- package/docs/ARCHITECTURE.ko.md +52 -0
- package/docs/ARCHITECTURE.md +12 -1
- package/docs/CLAUDE.ko.md +122 -0
- package/docs/CLAUDE.md +50 -1
- package/docs/CODEX.ko.md +98 -0
- package/docs/CODEX.md +41 -4
- package/docs/DEFENSIVE_USE_CASE.ko.md +85 -0
- package/docs/DEFENSIVE_USE_CASE.md +89 -0
- package/docs/EVALUATION.ko.md +67 -0
- package/docs/EVALUATION.md +36 -1
- package/docs/RELEASING.ko.md +70 -0
- package/docs/RELEASING.md +4 -0
- package/docs/ROADMAP.ko.md +46 -0
- package/docs/ROADMAP.md +14 -2
- package/docs/SECURITY_RESEARCH.ko.md +69 -0
- package/docs/SECURITY_RESEARCH.md +9 -0
- package/docs/THREAT_MODEL.ko.md +56 -0
- package/docs/THREAT_MODEL.md +10 -1
- package/docs/TRUST_STORE.ko.md +93 -0
- package/docs/TRUST_STORE.md +4 -0
- package/examples/adversarial/README.ko.md +31 -0
- package/examples/adversarial/README.md +31 -0
- package/examples/adversarial/drift-after.json +11 -0
- package/examples/adversarial/drift-before.json +8 -0
- package/examples/adversarial/expected.json +30 -0
- package/examples/adversarial/mcp-config.json +32 -0
- package/examples/adversarial/policy.json +10 -0
- package/examples/claude.mcp.json +24 -0
- package/examples/claude.policy.json +6 -0
- package/examples/claude.settings.json +26 -0
- package/examples/codex.config.toml +16 -0
- package/examples/codex.permissions.toml +13 -0
- package/examples/mcp.json +22 -0
- package/examples/trust-store.example.json +16 -0
- package/examples/trustdex.policy.json +14 -0
- package/package.json +4 -3
- package/src/claude-settings.mjs +173 -0
- package/src/codex-config.mjs +9 -7
- package/src/codex-settings.mjs +247 -0
- package/src/inspect.mjs +60 -3
- package/src/policy-packs.mjs +38 -2
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# 방어적 평가
|
|
2
|
+
|
|
3
|
+
<p align="right">
|
|
4
|
+
<a href="./EVALUATION.md">English</a> | <strong>한국어</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
이 평가는 체크인된 적대적 픽스처로 강제되는 동작을 기록합니다. 재현하려면 `npm run test:research`를 실행하세요. 테스트는 로컬 정적 검사만 수행하며 설정된 서버를 실행하거나 연결하지 않습니다.
|
|
8
|
+
|
|
9
|
+
## MCP 정책 사례
|
|
10
|
+
|
|
11
|
+
사례는 `examples/adversarial/policy.json`의 작은 오버레이와 함께 기본 제공 `strict` 정책을 사용합니다.
|
|
12
|
+
|
|
13
|
+
| 사례 | 필수 증거 | 예상 결정 | 이유 |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| `trusted-pinned-package` | 고정된 패키지, 명시적으로 신뢰된 패키지 이름 | `ALLOW` | 설정된 버전이 고정되어 있고 정책에 명시적인 패키지 신뢰 규칙이 있음 |
|
|
16
|
+
| `floating-version` | `install-on-run`, `unbounded-version` | `BLOCK` | 유동 패키지 버전은 검토 없이 변경될 수 있음 |
|
|
17
|
+
| `shell-launcher` | `shell-execution`, `filesystem-path` | `BLOCK` | 엄격한 정책이 셸 실행을 차단함 |
|
|
18
|
+
| `credential-bearing-url` | `embedded-credentials`, `network-endpoint`, `url-query-parameters` | `BLOCK` | 호스트가 허용 목록에 있어도 URL에 포함된 자격 증명은 차단 신호임 |
|
|
19
|
+
| `insecure-remote` | `insecure-transport`, `network-endpoint` | `BLOCK` | 호스트가 허용 목록에 있어도 평문 전송은 차단 신호임 |
|
|
20
|
+
| `sensitive-local-env` | `filesystem-path`, `secret-env` | `ASK` | 비밀 정보로 보이는 환경 변수 이름을 사용하는 로컬 확장에는 검토가 필요함 |
|
|
21
|
+
| `unknown-remote` | `network-endpoint` | `BLOCK` | 원격 호스트에 명시적인 허용 목록 또는 출처 증거가 없음 |
|
|
22
|
+
|
|
23
|
+
예상 합계: `ALLOW` 1개, `ASK` 1개, `BLOCK` 5개.
|
|
24
|
+
|
|
25
|
+
## 드리프트 사례
|
|
26
|
+
|
|
27
|
+
드리프트 픽스처는 신뢰되는 고정 패키지에서 시작한 뒤 `API_TOKEN` 환경 키를 추가합니다. 회귀 테스트는 다음 변경을 모두 요구합니다.
|
|
28
|
+
|
|
29
|
+
- `secret-env`에 대한 `signals-added`
|
|
30
|
+
- `ALLOW`에서 `ASK`로의 `decision-changed`
|
|
31
|
+
- `fingerprint-changed`
|
|
32
|
+
|
|
33
|
+
자리표시자 값 자체는 검사 결과나 스냅샷 어디에도 나타나면 안 됩니다.
|
|
34
|
+
|
|
35
|
+
## Claude Code 권한 사례
|
|
36
|
+
|
|
37
|
+
`test/claude-settings.test.mjs`는 제한된 `settings.json` 경계를 검사합니다.
|
|
38
|
+
|
|
39
|
+
| 사례 | 필수 증거 | 예상 결정 |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| 제한적인 `ask`/`deny`, 계획 모드, 우회 비활성화 | 추가 위험 신호 없음 | 파일이 로컬 증거이므로 `ASK` |
|
|
42
|
+
| 셸/파일 시스템/네트워크/서브에이전트 전체 허용과 우회 모드 | 광범위 자동 승인 및 우회 신호 | `BLOCK` |
|
|
43
|
+
| 좁은 셸, 웹, MCP 및 서브에이전트 허용 | 기능별 자동 승인 신호 | 셸이 자동 승인되므로 `strict`에서 `BLOCK` |
|
|
44
|
+
| 훅과 자격 증명 도우미 | 실행 가능한 인접 설정 신호 | `BLOCK` |
|
|
45
|
+
| 지원하지 않는 권한 키 또는 잘못된 규칙 | 파서 오류 | 종료 코드 `2` |
|
|
46
|
+
|
|
47
|
+
테스트는 명령, 도메인, 디렉터리, 훅, 도우미, 환경, 플러그인 및 알 수 없는 설정 필드에 자리표시자 값을 넣고 어떤 값도 검사 결과에 나타나지 않도록 요구합니다. 권한 설정 지문은 생성하지 않습니다.
|
|
48
|
+
|
|
49
|
+
## Codex 권한 사례
|
|
50
|
+
|
|
51
|
+
`test/codex-settings.test.mjs`는 `config.toml`의 승인 및 샌드박스 설정을 검사합니다.
|
|
52
|
+
|
|
53
|
+
| 사례 | 필수 증거 | 예상 결정 |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| `read-only`, `on-request`, 사용자 검토, 네트워크 비활성화 | 추가 위험 신호 없음 | 파일이 로컬 증거이므로 `ASK` |
|
|
56
|
+
| `danger-full-access`, `never`, 자동 검토, 실시간 웹 검색 | 제한 없는 샌드박스와 줄어든 사람 검토 | `BLOCK` |
|
|
57
|
+
| 작업 공간 쓰기, 네트워크 활성화, 추가 쓰기 가능 루트 | 제한된 기능 확장 신호 | `ASK` |
|
|
58
|
+
| 사용자 정의 권한, 플러그인 또는 검사하지 않은 섹션 | 명시적인 미검사 표면 신호 | `ASK` |
|
|
59
|
+
| 지원하지 않는 열거/타입, 혼합 권한 모델 또는 알 수 없는 샌드박스 키 | 파서 오류 | 종료 코드 `2` |
|
|
60
|
+
|
|
61
|
+
쓰기 가능 루트 경로와 관련 없는 설정 값은 결과에 나타나면 안 됩니다. Codex 설정 지문은 생성하지 않습니다.
|
|
62
|
+
|
|
63
|
+
## 이 평가가 측정하지 않는 것
|
|
64
|
+
|
|
65
|
+
이 벤치마크는 의도적으로 범위가 좁습니다. 런타임 동작, 샌드박스 탈출, 임의의 악성 코드, 모든 형태의 프롬프트 인젝션, 게시자 신원 소유권 또는 전이 의존성의 취약점을 측정하지 않습니다. 모든 Claude 또는 Codex 설정 범위를 병합하거나 세션 명령줄 재정의를 검사하거나 보고된 샌드박스가 실제로 활성화되었음을 증명하지 않습니다. 특히 이미 실행 중인 MCP 서버가 동적으로 반환하는 도구 설명은 현재 정적 설정 경계 밖에 있습니다.
|
|
66
|
+
|
|
67
|
+
이 작은 픽스처 집합은 회귀 기준선이지 탐지 정확도에 대한 통계적 주장이 아닙니다. 거짓 양성과 거짓 음성 비율을 측정하려면 민감 정보를 제거한 실제 설정으로 구성되고 독립적으로 검토된 더 큰 코퍼스가 필요합니다.
|
package/docs/EVALUATION.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Defensive evaluation
|
|
2
2
|
|
|
3
|
+
<p align="right">
|
|
4
|
+
<strong>English</strong> | <a href="./EVALUATION.ko.md">한국어</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
3
7
|
This evaluation records the behavior enforced by the checked-in adversarial fixtures. Run `npm run test:research` to reproduce it. The test performs local static inspection only and does not execute or contact any configured server.
|
|
4
8
|
|
|
5
9
|
## MCP policy cases
|
|
@@ -28,8 +32,39 @@ The drift fixture begins with the trusted pinned package and then introduces an
|
|
|
28
32
|
|
|
29
33
|
The placeholder value itself must not appear in either inspection result or snapshot.
|
|
30
34
|
|
|
35
|
+
## Claude Code permission cases
|
|
36
|
+
|
|
37
|
+
`test/claude-settings.test.mjs` exercises a focused `settings.json` boundary.
|
|
38
|
+
|
|
39
|
+
| Case | Required evidence | Expected decision |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| restrictive `ask`/`deny`, plan mode, bypass disabled | no added risk signal | `ASK` because the file is local evidence |
|
|
42
|
+
| bare shell/filesystem/network/subagent allows plus bypass mode | broad auto-approval and bypass signals | `BLOCK` |
|
|
43
|
+
| narrow shell, web, MCP, and subagent allows | capability-specific auto-approval signals | `BLOCK` under `strict` because shell is auto-approved |
|
|
44
|
+
| hooks and credential helper | executable adjacent-setting signals | `BLOCK` |
|
|
45
|
+
| unsupported permission key or malformed rule | parser error | exit `2` |
|
|
46
|
+
|
|
47
|
+
The tests place placeholder values in command, domain, directory, hook, helper,
|
|
48
|
+
environment, plugin, and unknown settings fields and require that none appear in the
|
|
49
|
+
inspection result. No permission-settings fingerprint is created.
|
|
50
|
+
|
|
51
|
+
## Codex permission cases
|
|
52
|
+
|
|
53
|
+
`test/codex-settings.test.mjs` exercises approval and sandbox settings in `config.toml`.
|
|
54
|
+
|
|
55
|
+
| Case | Required evidence | Expected decision |
|
|
56
|
+
| --- | --- | --- |
|
|
57
|
+
| `read-only`, `on-request`, user review, network disabled | no added risk signal | `ASK` because the file is local evidence |
|
|
58
|
+
| `danger-full-access`, `never`, auto-review, live web search | unrestricted sandbox plus reduced human review | `BLOCK` |
|
|
59
|
+
| workspace write, network enabled, additional writable root | bounded capability-expansion signals | `ASK` |
|
|
60
|
+
| custom permission, plugin, or uninspected sections | explicit uninspected-surface signals | `ASK` |
|
|
61
|
+
| unsupported enum/type, mixed permission models, or unknown sandbox key | parser error | exit `2` |
|
|
62
|
+
|
|
63
|
+
Writable-root paths and unrelated setting values must not appear in results. No
|
|
64
|
+
Codex-settings fingerprint is created.
|
|
65
|
+
|
|
31
66
|
## What this does not measure
|
|
32
67
|
|
|
33
|
-
This benchmark is intentionally narrow. It does not measure runtime behavior, sandbox escape, arbitrary malware, every form of prompt injection, publisher identity ownership, or vulnerabilities in transitive dependencies. In particular, tool descriptions returned dynamically by an already-running MCP server are outside the current static configuration boundary.
|
|
68
|
+
This benchmark is intentionally narrow. It does not measure runtime behavior, sandbox escape, arbitrary malware, every form of prompt injection, publisher identity ownership, or vulnerabilities in transitive dependencies. It does not merge every Claude or Codex settings scope, inspect session command-line overrides, or prove that the reported sandbox is active. In particular, tool descriptions returned dynamically by an already-running MCP server are outside the current static configuration boundary.
|
|
34
69
|
|
|
35
70
|
The small fixture set is a regression baseline, not a statistical claim about detection accuracy. False-positive and false-negative rates require a larger, independently reviewed corpus of redacted real-world configurations.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# TrustDex 릴리스
|
|
2
|
+
|
|
3
|
+
<p align="right">
|
|
4
|
+
<a href="./RELEASING.md">English</a> | <strong>한국어</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
TrustDex는 두 개의 작은 GitHub Actions 워크플로를 사용합니다.
|
|
8
|
+
|
|
9
|
+
- `release.yml`은 테스트 통과 후 GitHub 태그와 릴리스를 생성합니다.
|
|
10
|
+
- `publish.yml`은 바로 그 태그를 npm에 게시합니다.
|
|
11
|
+
|
|
12
|
+
이 분리는 GitHub 릴리스 생성과 레지스트리 자격 증명을 분리합니다.
|
|
13
|
+
|
|
14
|
+
## 최초 게시
|
|
15
|
+
|
|
16
|
+
일회성 토큰 기반 최초 게시는 완료되었습니다. 일반 릴리스에서 반복하지 마세요.
|
|
17
|
+
|
|
18
|
+
단기 `NPM_TOKEN`은 신뢰할 수 있는 게시를 설정하고 검증할 때까지만 유지할 수 있습니다. 최초 OIDC 게시에 성공한 즉시 npm 토큰과 GitHub 저장소 비밀을 모두 삭제하세요.
|
|
19
|
+
|
|
20
|
+
npm 자격 증명을 이슈, 풀 리퀘스트, 소스 파일, 로그 또는 채팅에 붙여 넣지 마세요.
|
|
21
|
+
|
|
22
|
+
## npm 신뢰할 수 있는 게시
|
|
23
|
+
|
|
24
|
+
패키지가 만들어진 뒤 다음 값으로 npm 신뢰할 수 있는 게시를 설정합니다.
|
|
25
|
+
|
|
26
|
+
- GitHub 사용자/조직: `grigent`
|
|
27
|
+
- 저장소: `trustdex`
|
|
28
|
+
- 워크플로 파일 이름: `publish.yml`
|
|
29
|
+
- 허용 작업: 직접 `npm publish`
|
|
30
|
+
|
|
31
|
+
워크플로는 `contents: read`와 `id-token: write`만 부여합니다. 그러면 npm은 장기 쓰기 토큰 대신 OIDC로 GitHub 호스팅 작업을 인증할 수 있습니다.
|
|
32
|
+
|
|
33
|
+
신뢰할 수 있는 게시가 작동하면 `NPM_TOKEN` 저장소 비밀을 제거하고 npm에서 최초 게시 토큰을 폐기합니다. npm이 OIDC 인증을 선택할 수 있도록 워크플로는 의도적으로 표준 `npm publish` 명령을 계속 사용합니다.
|
|
34
|
+
|
|
35
|
+
두 릴리스 워크플로는 `npm pkg fix`를 실행하고 패킹 또는 게시 전에 깨끗한 `package.json` 차이를 요구합니다. 이렇게 하면 npm이 CLI 진입점 같은 중요한 메타데이터를 조용히 정규화해 없애는 것을 방지합니다.
|
|
36
|
+
|
|
37
|
+
## 출처 및 릴리스 증거
|
|
38
|
+
|
|
39
|
+
저장소와 패키지가 공개이므로 GitHub 호스팅 게시는 npm 출처를 생성할 수 있습니다. 워크플로는 `--provenance`도 명시적으로 전달합니다.
|
|
40
|
+
|
|
41
|
+
출처는 게시된 아티팩트를 해당 소스/빌드 환경과 연결합니다. 패키지에 악성 동작이 없다는 것을 증명하지는 않습니다.
|
|
42
|
+
|
|
43
|
+
GitHub 릴리스 워크플로는 다음도 생성하고 업로드합니다.
|
|
44
|
+
|
|
45
|
+
- 릴리스 커밋에서 빌드한 npm 패키지 tarball
|
|
46
|
+
- CycloneDX JSON SBOM
|
|
47
|
+
- tarball과 SBOM을 포함하는 `SHA256SUMS` 파일
|
|
48
|
+
- tarball용 GitHub 빌드 출처 증명
|
|
49
|
+
- SBOM을 tarball에 연결하는 GitHub SBOM 증명
|
|
50
|
+
|
|
51
|
+
릴리스를 다운로드한 뒤 검사 또는 설치하기 전에 체크섬과 GitHub 증명을 검증하세요.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
shasum -a 256 -c SHA256SUMS
|
|
55
|
+
gh attestation verify trustdex-<version>.tgz --repo grigent/trustdex
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
npm 출처 진술과 GitHub 증명은 서로 다른 게시 경로를 다룹니다. 어느 쪽도 악성 코드 분석이 아니며 릴리스 콘텐츠와 문서화된 신뢰 경계를 검토하는 일을 대신하지 않습니다.
|
|
59
|
+
|
|
60
|
+
## 버전 체크리스트
|
|
61
|
+
|
|
62
|
+
각 릴리스 전에:
|
|
63
|
+
|
|
64
|
+
1. `package.json` 버전 업데이트
|
|
65
|
+
2. 해당 변경 기록 섹션을 `Unreleased` 밖으로 이동
|
|
66
|
+
3. CI가 통과하는지 확인
|
|
67
|
+
4. 정확히 `v<package version>`으로 릴리스 워크플로 실행
|
|
68
|
+
5. 바로 그 릴리스 태그에 대해 게시 워크플로 실행
|
|
69
|
+
|
|
70
|
+
게시 워크플로는 최신 브랜치 HEAD가 아니라 태그 SHA를 체크아웃하므로 npm 아티팩트에 이후 커밋이 조용히 포함될 수 없습니다.
|
package/docs/RELEASING.md
CHANGED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 로드맵
|
|
2
|
+
|
|
3
|
+
<p align="right">
|
|
4
|
+
<a href="./ROADMAP.md">English</a> | <strong>한국어</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
TrustDex는 초기 단계입니다. 이 로드맵은 방향을 공유하며 릴리스를 약속하지 않습니다.
|
|
8
|
+
|
|
9
|
+
## 현재: 경계 강화
|
|
10
|
+
|
|
11
|
+
- MCP JSON, Codex TOML, 스킬 및 플러그인 매니페스트의 적대적 픽스처 확장
|
|
12
|
+
- Claude Code와 Codex 모두의 적대적 권한 픽스처 확장
|
|
13
|
+
- 사람이 읽을 수 있는 모든 출력에 비밀 값이 계속 포함되지 않는지 검증
|
|
14
|
+
- 크로스 플랫폼 소스 및 경로 정규화 개선
|
|
15
|
+
- 안정적인 정책 및 스냅샷 스키마 규칙 문서화
|
|
16
|
+
- CI, CodeQL 및 릴리스 자동화를 재현 가능하고 검토 가능한 상태로 유지
|
|
17
|
+
|
|
18
|
+
## 다음: 에이전트 행동 경계를 검토 가능하게 만들기
|
|
19
|
+
|
|
20
|
+
- 명령, 경로, 도메인 또는 자격 증명 값을 보관하지 않고 병합된 설정 소스 검사
|
|
21
|
+
- 시간에 따른 권한 상태를 비교하고 에이전트 자율성이 넓어지면 재검토 요구
|
|
22
|
+
- 승인된 도구 출처와 해당 도구에 부여된 행동 권한 연결
|
|
23
|
+
- 오케스트레이터와 CI용 기계 판독 가능 결정 출력 정의
|
|
24
|
+
- 권고형 설정 검사가 런타임 및 운영체제 샌드박스와 결합되는 방식 문서화
|
|
25
|
+
|
|
26
|
+
## 그다음: 무결성 증명
|
|
27
|
+
|
|
28
|
+
- 레지스트리가 암호학적 해시를 제공할 때 변경 불가능한 패키지 아티팩트 검증
|
|
29
|
+
- 레지스트리 관찰을 정확한 패키지 버전 및 저장소 신원과 연결
|
|
30
|
+
- TrustDex 릴리스용 체크섬 또는 더 강력한 출처 게시
|
|
31
|
+
- 소유권 이전, 삭제된 릴리스, 게시 취소된 패키지 및 레지스트리 드리프트용 픽스처 추가
|
|
32
|
+
|
|
33
|
+
## 향후: 상호 운용성 확장
|
|
34
|
+
|
|
35
|
+
- 서명된 스냅샷, 승인 및 재검사 워크플로를 Codex `config.toml`로 확장
|
|
36
|
+
- 추가 에이전트 런타임 및 레지스트리용 어댑터 추가
|
|
37
|
+
- 테스트에 근거한 호환성 매트릭스 게시
|
|
38
|
+
- 조직 관리형 신뢰 저장소 및 검토 키 교체 탐색
|
|
39
|
+
|
|
40
|
+
## 도입 목표
|
|
41
|
+
|
|
42
|
+
프로젝트는 거짓 양성, 거짓 음성, 설정 형식 및 유지관리자 워크플로에 대해 민감하지 않은 피드백을 공유할 파일럿 사용자를 찾고 있습니다. 사용 관련 주장은 검증할 수 있을 때만 문서화합니다. 스타 수, 브랜딩 및 패키지 이름은 절대 보안 증거로 취급하지 않습니다.
|
|
43
|
+
|
|
44
|
+
## 참여 방법
|
|
45
|
+
|
|
46
|
+
실제 설정에서 TrustDex를 실행했다면 **Pilot feedback** 이슈 양식이 결과를 보고하는 가장 빠른 방법입니다. 그렇지 않으면 사용 사례와 민감 정보를 제거한 설정 형태를 설명하는 범위가 명확한 이슈를 여세요. 보안에 민감한 제안에는 예상 신뢰 경계와 우회 사례를 포함하세요.
|
package/docs/ROADMAP.md
CHANGED
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
# Roadmap
|
|
2
2
|
|
|
3
|
+
<p align="right">
|
|
4
|
+
<strong>English</strong> | <a href="./ROADMAP.ko.md">한국어</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
3
7
|
TrustDex is early-stage. This roadmap communicates direction and is not a release commitment.
|
|
4
8
|
|
|
5
9
|
## Now: harden the boundary
|
|
6
10
|
|
|
7
11
|
- expand adversarial fixtures for MCP JSON, Codex TOML, skills, and plugin manifests
|
|
12
|
+
- expand adversarial permission fixtures for both Claude Code and Codex
|
|
8
13
|
- verify that all human-readable output remains free of secret values
|
|
9
14
|
- improve cross-platform source and path normalization
|
|
10
15
|
- document stable policy and snapshot schema rules
|
|
11
16
|
- keep CI, CodeQL, and release automation reproducible and reviewable
|
|
12
17
|
|
|
13
|
-
## Next:
|
|
18
|
+
## Next: make agent action boundaries reviewable
|
|
19
|
+
|
|
20
|
+
- inspect merged settings sources without retaining commands, paths, domains, or credential values
|
|
21
|
+
- compare permission posture over time and require review when agent autonomy expands
|
|
22
|
+
- connect approved tool provenance to the action permissions granted to that tool
|
|
23
|
+
- define machine-readable decision output for orchestrators and CI
|
|
24
|
+
- document how advisory settings checks compose with runtime and operating-system sandboxes
|
|
25
|
+
|
|
26
|
+
## Then: prove integrity
|
|
14
27
|
|
|
15
28
|
- verify immutable package artifacts when registries expose cryptographic hashes
|
|
16
29
|
- connect registry observations to exact package versions and repository identities
|
|
@@ -22,7 +35,6 @@ TrustDex is early-stage. This roadmap communicates direction and is not a releas
|
|
|
22
35
|
- extend signed snapshot, approval, and recheck workflows to Codex `config.toml`
|
|
23
36
|
- add adapters for additional agent runtimes and registries
|
|
24
37
|
- publish a compatibility matrix backed by tests
|
|
25
|
-
- define machine-readable decision output for CI and policy tooling
|
|
26
38
|
- explore organization-managed trust stores and review-key rotation
|
|
27
39
|
|
|
28
40
|
## Adoption goals
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# 방어적 보안 연구
|
|
2
|
+
|
|
3
|
+
<p align="right">
|
|
4
|
+
<a href="./SECURITY_RESEARCH.md">English</a> | <strong>한국어</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
TrustDex는 AI 에이전트가 서드파티 도구에 접근하기 전에 내리는 신뢰 결정에 관한 합법적인 방어적 연구를 위해 개발됩니다. 이 문서는 해당 작업의 승인, 안전 및 공개 경계를 정의합니다.
|
|
8
|
+
|
|
9
|
+
## 목적
|
|
10
|
+
|
|
11
|
+
이 연구는 사람이 또는 정책이 명시적으로 신뢰할 때까지 확장을 사용할 수 없게 유지하는 데 관찰 가능한 설정, 출처, 무결성 및 기능 증거가 충분한지 묻습니다. 현재 작업은 다음에 중점을 둡니다.
|
|
12
|
+
|
|
13
|
+
- 고정되지 않았거나 대체된 패키지
|
|
14
|
+
- 실행 시 설치 및 셸 런처
|
|
15
|
+
- URL에 포함된 자격 증명과 안전하지 않은 원격 전송
|
|
16
|
+
- 값을 보관하지 않고 비밀 정보를 포함하는 환경 변수 이름 감지
|
|
17
|
+
- 소스, 출처, 결정, 지문 및 기능 드리프트
|
|
18
|
+
- 서명된 검토 기록과 신뢰 관련 변경 후 재검토
|
|
19
|
+
- 지원하지 않는 구문에서 안전하게 실패해야 하는 파서 동작
|
|
20
|
+
- Claude Code 권한 설정의 자동 행동 권한
|
|
21
|
+
- Codex 샌드박스, 승인, 네트워크, 쓰기 가능 루트, 웹 검색 및 서브에이전트 설정
|
|
22
|
+
|
|
23
|
+
의도한 결과물은 재현 가능한 픽스처, 회귀 테스트, 문서화된 제한 사항 및 에이전트 개발자와 운영자를 위한 실용적인 완화책입니다.
|
|
24
|
+
|
|
25
|
+
## 승인 경계
|
|
26
|
+
|
|
27
|
+
연구는 다음으로 제한됩니다.
|
|
28
|
+
|
|
29
|
+
- 연구자가 소유한 시스템과 계정 또는
|
|
30
|
+
- 연구자가 테스트할 명시적인 승인을 받은 시스템 그리고
|
|
31
|
+
- 민감하지 않은 픽스처를 사용하는 격리된 로컬 또는 연구 전용 테스트 환경
|
|
32
|
+
|
|
33
|
+
TrustDex 연구는 관련 없는 공개 시스템을 테스트할 권한을 부여하지 않습니다. 자격 증명 탈취, 지속성 확보, 파괴적 작업, 데이터 유출, 대규모 악용, 무단 접근, 악성 코드 배포 및 다른 사람의 보호 조치 우회는 제외됩니다.
|
|
34
|
+
|
|
35
|
+
## 안전한 테스트 데이터
|
|
36
|
+
|
|
37
|
+
체크인된 적대적 픽스처는 비활성 설정 문서입니다. 예약된 `.invalid` 도메인, 존재하지 않는 패키지 네임스페이스 및 명백한 자리표시자 값을 사용합니다. TrustDex는 검사 중에 MCP 서버를 실행하지 않습니다.
|
|
38
|
+
|
|
39
|
+
테스트는 비밀 정보로 보이는 값, URL 자격 증명, 쿼리 값 및 비공개 경로가 검사 결과에 나타나지 않는지 확인합니다. 실제 자격 증명, 비공개 엔드포인트, 개인 데이터 또는 프로덕션 서비스가 필요한 픽스처는 이 저장소에서 허용되지 않습니다.
|
|
40
|
+
|
|
41
|
+
## 방법
|
|
42
|
+
|
|
43
|
+
각 연구 사례에는 다음이 포함되어야 합니다.
|
|
44
|
+
|
|
45
|
+
1. 최소한의 검토 가능한 입력 픽스처
|
|
46
|
+
2. 예상 신뢰 관련 신호
|
|
47
|
+
3. 이름이 지정된 정책에서 예상되는 `ALLOW`, `ASK` 또는 `BLOCK` 결정
|
|
48
|
+
4. 자동화된 회귀 테스트
|
|
49
|
+
5. 문서화된 제한 사항 또는 가능한 우회 조건
|
|
50
|
+
|
|
51
|
+
`ALLOW` 결과는 관찰된 증거가 선택한 정책과 일치한다는 의미일 뿐입니다. 임의의 코드가 안전하다는 증거로 표현해서는 안 됩니다.
|
|
52
|
+
|
|
53
|
+
## 발견 사항 처리
|
|
54
|
+
|
|
55
|
+
사용자를 위험에 빠뜨릴 수 있는 잠재적인 TrustDex 취약점은 [SECURITY.ko.md](../SECURITY.ko.md)를 따라야 합니다. 다른 프로젝트에서 발견한 사항은 해당 프로젝트의 승인된 보안 채널을 통해 공개해야 하며, 합리적인 공동 공개 절차가 끝나기 전에 게시해서는 안 됩니다.
|
|
56
|
+
|
|
57
|
+
공개 보고서에서는 자격 증명, 비공개 엔드포인트, 독점 프롬프트, 개인 데이터 및 불필요한 위험을 만드는 악용 세부 정보를 제거해야 합니다. 연구 노트는 문제를 재현하고 수정하는 데 필요한 최소한의 증거를 우선해야 합니다.
|
|
58
|
+
|
|
59
|
+
## 현재 재현 가능한 증거
|
|
60
|
+
|
|
61
|
+
- [적대적 MCP 픽스처](../examples/adversarial/README.ko.md)
|
|
62
|
+
- [Claude Code 권한 픽스처](../examples/claude.settings.json)
|
|
63
|
+
- [Codex 권한 픽스처](../examples/codex.permissions.toml)
|
|
64
|
+
- [평가 기록](EVALUATION.ko.md)
|
|
65
|
+
- [방어적 AI 에이전트 보안 사용 사례](DEFENSIVE_USE_CASE.ko.md)
|
|
66
|
+
- [위협 모델](THREAT_MODEL.ko.md)
|
|
67
|
+
- [보안 정책](../SECURITY.ko.md)
|
|
68
|
+
|
|
69
|
+
프로젝트는 저장소의 Pilot feedback 이슈 양식을 통해 거짓 양성과 거짓 음성을 포함한 검증 가능한 파일럿 피드백을 환영합니다. 인기도, 브랜딩 및 검증할 수 없는 사용 후기는 보안 증거로 취급하지 않습니다.
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Defensive security research
|
|
2
2
|
|
|
3
|
+
<p align="right">
|
|
4
|
+
<strong>English</strong> | <a href="./SECURITY_RESEARCH.ko.md">한국어</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
3
7
|
TrustDex is developed for legitimate defensive research into trust decisions made before AI agents receive access to third-party tools. This document defines the authorization, safety, and disclosure boundaries for that work.
|
|
4
8
|
|
|
5
9
|
## Purpose
|
|
@@ -13,6 +17,8 @@ The research asks whether observable configuration, provenance, integrity, and c
|
|
|
13
17
|
- source, provenance, decision, fingerprint, and capability drift
|
|
14
18
|
- signed review records and re-review after trust-relevant change
|
|
15
19
|
- parser behavior that must fail closed on unsupported syntax
|
|
20
|
+
- automatic action grants in Claude Code permission settings
|
|
21
|
+
- Codex sandbox, approval, network, writable-root, web-search, and subagent settings
|
|
16
22
|
|
|
17
23
|
The intended outputs are reproducible fixtures, regression tests, documented limitations, and practical mitigations for agent developers and operators.
|
|
18
24
|
|
|
@@ -53,7 +59,10 @@ Public reports must remove credentials, private endpoints, proprietary prompts,
|
|
|
53
59
|
## Current reproducible evidence
|
|
54
60
|
|
|
55
61
|
- [Adversarial MCP fixtures](../examples/adversarial/README.md)
|
|
62
|
+
- [Claude Code permission fixture](../examples/claude.settings.json)
|
|
63
|
+
- [Codex permission fixture](../examples/codex.permissions.toml)
|
|
56
64
|
- [Evaluation record](EVALUATION.md)
|
|
65
|
+
- [Defensive AI-agent security use case](DEFENSIVE_USE_CASE.md)
|
|
57
66
|
- [Threat model](THREAT_MODEL.md)
|
|
58
67
|
- [Security policy](../SECURITY.md)
|
|
59
68
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# 위협 모델
|
|
2
|
+
|
|
3
|
+
<p align="right">
|
|
4
|
+
<a href="./THREAT_MODEL.md">English</a> | <strong>한국어</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
TrustDex는 하나의 좁은 질문을 다룹니다.
|
|
8
|
+
|
|
9
|
+
> **사용자의 정책에 따라 에이전트가 이 확장을 보거나 이 자동 행동 권한을 받도록 허용해야 하는가?**
|
|
10
|
+
|
|
11
|
+
## 범위 내
|
|
12
|
+
|
|
13
|
+
- 알 수 없거나 승인되지 않은 MCP 소스
|
|
14
|
+
- 검토 없이 변경될 수 있는 유동 패키지 버전
|
|
15
|
+
- 검토된 스냅샷 사이의 소스 변경
|
|
16
|
+
- 출처 주장의 변경 또는 소멸
|
|
17
|
+
- 새로 관찰된 셸, 파일 시스템, 네트워크, 설치, 와일드카드 도구 또는 비밀 환경 신호
|
|
18
|
+
- 정책 회귀로 발생하는 안전하지 않은 도구 노출
|
|
19
|
+
- 검토된 레지스트리 무결성 메타데이터와 일치하지 않는 패키지 바이트로의 대체
|
|
20
|
+
- 설정된 패키지 버전이 무결성 검증된 아티팩트 버전에서 벗어남
|
|
21
|
+
- 서명된 신뢰 기록이 있을 때 검토된 스냅샷의 변조
|
|
22
|
+
- 광범위한 셸, 파일 시스템, 네트워크, MCP 또는 서브에이전트 작업을 조용히 자동 승인하는 Claude Code 권한 규칙
|
|
23
|
+
- 샌드박스를 제거하거나 승인을 생략하거나 네트워크 접근 또는 쓰기 가능 루트를 추가하는 Codex 설정
|
|
24
|
+
- 명시적인 검토 없이 변경되는 행동 권한 설정
|
|
25
|
+
|
|
26
|
+
## 신뢰 경계
|
|
27
|
+
|
|
28
|
+
TrustDex가 신뢰하는 것:
|
|
29
|
+
|
|
30
|
+
- 자체 정책/설정을 읽을 수 있을 정도의 로컬 호스트
|
|
31
|
+
- 사용자가 명시적으로 설정한 정책
|
|
32
|
+
- 신뢰 저장소 유지관리자가 검토한 범위 내의 출처 증거
|
|
33
|
+
- 사용자가 신뢰할 수 있는 채널을 통해 얻은 경우에만 공개 키
|
|
34
|
+
|
|
35
|
+
TrustDex는 익숙한 프로젝트 이름, 스타 수, 패키지 이름 또는 로고를 출처로 취급하지 **않습니다**.
|
|
36
|
+
|
|
37
|
+
## 범위 밖
|
|
38
|
+
|
|
39
|
+
- 임의의 서드파티 코드가 악성이 아님을 증명
|
|
40
|
+
- 도구 실행 샌드박싱
|
|
41
|
+
- 모든 프롬프트 인젝션 기법 탐지
|
|
42
|
+
- 모든 전이 의존성의 취약점 검사
|
|
43
|
+
- 무결성이 일치하는 패키지 바이트가 악성이 아님을 증명
|
|
44
|
+
- 로컬 신뢰 저장소 주장만으로 게시자 소유권을 독립적으로 증명
|
|
45
|
+
- 완전히 침해된 호스트 보호
|
|
46
|
+
- 도난당한 서명 비공개 키로부터 보호
|
|
47
|
+
- 모든 사용자, 프로젝트, 프로필, 관리형, 시스템, 환경 및 명령줄 소스를 병합한 실제 설정 계산
|
|
48
|
+
- Claude Code 또는 Codex 행동 권한의 런타임 강제 적용
|
|
49
|
+
|
|
50
|
+
## 중요한 실패 모드
|
|
51
|
+
|
|
52
|
+
유효한 서명은 신뢰 기록이 해당 비공개 키로 서명되었고 연결된 스냅샷 다이제스트가 변경되지 않았음을 증명합니다. 원래 검토가 정확했다는 것은 증명하지 않습니다.
|
|
53
|
+
|
|
54
|
+
## 설계 원칙
|
|
55
|
+
|
|
56
|
+
TrustDex는 누락된 증거를 신뢰로 변환해서는 안 됩니다. 알 수 없는 출처는 추측할 이유가 아니라 정책 입력입니다.
|
package/docs/THREAT_MODEL.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# Threat model
|
|
2
2
|
|
|
3
|
+
<p align="right">
|
|
4
|
+
<strong>English</strong> | <a href="./THREAT_MODEL.ko.md">한국어</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
3
7
|
TrustDex addresses one narrow question:
|
|
4
8
|
|
|
5
|
-
> **Should an agent
|
|
9
|
+
> **Should an agent see this extension or receive this automatic action capability under the user's policy?**
|
|
6
10
|
|
|
7
11
|
## In scope
|
|
8
12
|
|
|
@@ -15,6 +19,9 @@ TrustDex addresses one narrow question:
|
|
|
15
19
|
- substitution of package bytes that do not match reviewed registry integrity metadata
|
|
16
20
|
- configured package versions drifting from an integrity-verified artifact version
|
|
17
21
|
- tampering with a reviewed snapshot when a signed trust record is available
|
|
22
|
+
- Claude Code permission rules that silently auto-approve broad shell, filesystem, network, MCP, or subagent actions
|
|
23
|
+
- Codex configurations that remove the sandbox, suppress approvals, enable network access, or add writable roots
|
|
24
|
+
- action-permission settings changing without an explicit review
|
|
18
25
|
|
|
19
26
|
## Trust boundaries
|
|
20
27
|
|
|
@@ -37,6 +44,8 @@ TrustDex does **not** treat a familiar project name, star count, package name, o
|
|
|
37
44
|
- independently proving publisher ownership from a local trust-store claim
|
|
38
45
|
- protecting a fully compromised host
|
|
39
46
|
- protecting a stolen signing private key
|
|
47
|
+
- calculating the effective configuration after every user, project, profile, managed, system, environment, and command-line source is merged
|
|
48
|
+
- enforcing Claude Code or Codex action permissions at runtime
|
|
40
49
|
|
|
41
50
|
## Important failure mode
|
|
42
51
|
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# 신뢰 저장소와 출처
|
|
2
|
+
|
|
3
|
+
<p align="right">
|
|
4
|
+
<a href="./TRUST_STORE.md">English</a> | <strong>한국어</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
TrustDex는 패키지 이름, GitHub 스타 수 또는 브랜딩으로 게시자가 "공식"인지 추측하지 않습니다.
|
|
8
|
+
|
|
9
|
+
사용자 또는 조직이 로컬 신뢰 저장소에 명시적인 주장을 배치한 경우에만 소스에 `verified` 출처 주장을 부여할 수 있습니다.
|
|
10
|
+
|
|
11
|
+
## 형식
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"version": 1,
|
|
16
|
+
"claims": [
|
|
17
|
+
{
|
|
18
|
+
"type": "package",
|
|
19
|
+
"subject": "example-mcp-server",
|
|
20
|
+
"publisher": "Example Publisher",
|
|
21
|
+
"status": "verified",
|
|
22
|
+
"evidence": {
|
|
23
|
+
"kind": "manual-review",
|
|
24
|
+
"reference": "https://example.invalid/security-review",
|
|
25
|
+
"checkedAt": "2026-09-19T00:00:00Z"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
지원되는 주장 유형:
|
|
33
|
+
|
|
34
|
+
- `package` - npm/Python 형식의 패키지 주체
|
|
35
|
+
- `remote` - 원격 MCP 호스트 이름
|
|
36
|
+
- `repository` - 향후 저장소 어댑터용 저장소 신원
|
|
37
|
+
|
|
38
|
+
`verified`라는 단어는 **신뢰 저장소 유지관리자가 기록한 증거에 따라 검증됨**을 의미합니다. OpenAI, TrustDex, GitHub, npm 또는 다른 플랫폼이 확장을 인증했다는 의미가 아닙니다.
|
|
39
|
+
|
|
40
|
+
## 사용하기
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
node ./bin/trustdex.mjs inspect ./examples/mcp.json \
|
|
44
|
+
--pack official-first \
|
|
45
|
+
--trust-store ./examples/trust-store.example.json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
알 수 없는 서드파티 소스는 `official-first`에서 계속 차단됩니다. 검증된 출처 주장은 초기 신뢰를 설정할 수 있지만 셸 실행과 같은 차단 기능 신호는 여전히 해당 신뢰보다 우선할 수 있습니다.
|
|
49
|
+
|
|
50
|
+
## 권장 사례
|
|
51
|
+
|
|
52
|
+
- 팀 정책인 신뢰 저장소는 소스 관리에 보관
|
|
53
|
+
- 각 주장을 지속 가능한 증거에 연결
|
|
54
|
+
- 가능한 경우 패키지 버전 또는 소스 커밋 고정
|
|
55
|
+
- 소유권이나 기능이 변경되면 주장을 재검토
|
|
56
|
+
- 증거 필드에 자격 증명, 토큰, 비공개 URL 또는 비밀을 기록하지 않음
|
|
57
|
+
|
|
58
|
+
## 무결성 기반 패키지 증거
|
|
59
|
+
|
|
60
|
+
`trust-source npm` 및 `trust-source mcp`의 선택적 `--artifact` 플래그는 아티팩트 증거를 기록하기 전에 사용자가 제공한 파일을 검증합니다.
|
|
61
|
+
|
|
62
|
+
- npm 관찰에는 SHA-256, SHA-384 또는 SHA-512를 사용하는 SRI 값이 필요합니다.
|
|
63
|
+
- MCP Registry 관찰에는 SHA-256 다이제스트가 있는 단일 패키지가 필요합니다.
|
|
64
|
+
- 파일은 로컬에서 읽으며 실행하거나 업로드하지 않습니다.
|
|
65
|
+
- 신뢰 저장소 주장은 레지스트리 식별자, 버전, 예상 무결성 메타데이터, 계산된 다이제스트 및 검증 시간을 기록합니다.
|
|
66
|
+
- 설정된 패키지 버전은 검증된 아티팩트 버전과 일치해야 합니다.
|
|
67
|
+
|
|
68
|
+
증거 형식 예시:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"kind": "npm-registry",
|
|
73
|
+
"reference": "https://www.npmjs.com/package/example-mcp-server",
|
|
74
|
+
"checkedAt": "2026-09-19T00:00:00Z",
|
|
75
|
+
"artifact": {
|
|
76
|
+
"registryType": "npm",
|
|
77
|
+
"identifier": "example-mcp-server",
|
|
78
|
+
"version": "1.2.3",
|
|
79
|
+
"integrity": "sha512-..."
|
|
80
|
+
},
|
|
81
|
+
"artifactVerification": {
|
|
82
|
+
"verified": true,
|
|
83
|
+
"algorithm": "sha512",
|
|
84
|
+
"digest": "...",
|
|
85
|
+
"encoding": "base64",
|
|
86
|
+
"version": "1.2.3",
|
|
87
|
+
"identifier": "example-mcp-server",
|
|
88
|
+
"verifiedAt": "2026-09-19T00:00:01Z"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
아티팩트 무결성은 제공된 바이트가 해당 시점에 관찰된 레지스트리 메타데이터와 일치한다는 것만 증명합니다. 바이트가 안전하다는 것, 레지스트리 계정이 침해되지 않았다는 것 또는 게시자 이름이 합법적이라는 것은 증명하지 않습니다.
|
package/docs/TRUST_STORE.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Trust store and provenance
|
|
2
2
|
|
|
3
|
+
<p align="right">
|
|
4
|
+
<strong>English</strong> | <a href="./TRUST_STORE.ko.md">한국어</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
3
7
|
TrustDex does not guess whether a publisher is "official" from a package name, GitHub stars, or branding.
|
|
4
8
|
|
|
5
9
|
A source can receive a `verified` provenance assertion only when the user or an organization places an explicit claim in a local trust store.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# 비활성 적대적 픽스처
|
|
2
|
+
|
|
3
|
+
<p align="right">
|
|
4
|
+
<a href="./README.md">English</a> | <strong>한국어</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
이 파일들은 TrustDex 정책 경계의 재현 가능한 방어적 테스트를 제공합니다.
|
|
8
|
+
|
|
9
|
+
- `mcp-config.json`에는 정적인 MCP 설정 사례 7개가 포함되어 있습니다.
|
|
10
|
+
- `policy.json`은 소스 허용 목록과 독립적으로 차단 신호를 테스트할 수 있도록 픽스처 패키지 1개와 픽스처 호스트 2개를 명시적으로 신뢰합니다.
|
|
11
|
+
- `expected.json`은 필수 결정과 최소 신호를 기록합니다.
|
|
12
|
+
- `drift-before.json`과 `drift-after.json`은 검토된 패키지에 비밀 정보를 포함하는 환경 키가 추가되는 상황을 모델링합니다.
|
|
13
|
+
|
|
14
|
+
모든 패키지 이름은 가상이며, 모든 원격 엔드포인트는 예약된 `.invalid` 최상위 도메인을 사용하고, 자격 증명으로 보이는 모든 값은 자리표시자입니다. 이를 실제 값으로 바꾸지 마세요. TrustDex는 이 파일을 읽지만 나열된 명령을 실행하거나 나열된 엔드포인트에 연결하지 않습니다.
|
|
15
|
+
|
|
16
|
+
강제 평가 실행:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm run test:research
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
사람이 읽을 수 있는 결정을 직접 검사:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node ./bin/trustdex.mjs inspect \
|
|
26
|
+
./examples/adversarial/mcp-config.json \
|
|
27
|
+
--pack strict \
|
|
28
|
+
--policy ./examples/adversarial/policy.json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
차단 사례가 있으므로 두 번째 명령은 종료 코드 `2`를 반환합니다. 예상 결과와 제한 사항은 [평가 기록](../../docs/EVALUATION.ko.md)을 참고하세요.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Inert adversarial fixtures
|
|
2
|
+
|
|
3
|
+
<p align="right">
|
|
4
|
+
<strong>English</strong> | <a href="./README.ko.md">한국어</a>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
These files provide a reproducible defensive test of TrustDex's policy boundary.
|
|
8
|
+
|
|
9
|
+
- `mcp-config.json` contains seven static MCP configuration cases.
|
|
10
|
+
- `policy.json` explicitly trusts one fixture package and two fixture hosts so blocking signals can be tested independently of source allowlisting.
|
|
11
|
+
- `expected.json` records the required decisions and minimum signals.
|
|
12
|
+
- `drift-before.json` and `drift-after.json` model a reviewed package gaining a secret-bearing environment key.
|
|
13
|
+
|
|
14
|
+
All package names are fictional, all remote endpoints use the reserved `.invalid` top-level domain, and all apparent credentials are placeholders. Do not replace them with real values. TrustDex reads these files but never executes the listed commands or contacts the listed endpoints.
|
|
15
|
+
|
|
16
|
+
Run the enforced evaluation:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm run test:research
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Inspect the human-readable decisions directly:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node ./bin/trustdex.mjs inspect \
|
|
26
|
+
./examples/adversarial/mcp-config.json \
|
|
27
|
+
--pack strict \
|
|
28
|
+
--policy ./examples/adversarial/policy.json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The second command exits with code `2` because blocking cases are present. See [the evaluation record](../../docs/EVALUATION.md) for the expected results and limitations.
|