Share
## https://sploitus.com/exploit?id=AE2EDBC2-2D20-55B5-9D67-33336915F964
# CVE-2026-59891 Regression & Control Lab

`@sigstore/oci`의 μ‹€μ œ μ·¨μ•½ 버전과 μˆ˜μ • 버전을 같은 μž…λ ₯으둜 λΉ„κ΅ν•˜κ³ ,
ν™˜κ²½λ³„ λ…ΈμΆœ 쑰건을 μ κ²€ν•˜λŠ” κ²©λ¦¬ν˜• μ‹€μŠ΅ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

> 이 ν”„λ‘œμ νŠΈμ˜ CVE ReporterλŠ”
> [gyubin02](https://github.com/gyubin02)μž…λ‹ˆλ‹€.

## 무엇을 κ²€μ¦ν•˜λ‚˜

CVE-2026-59891의 핡심은 Registry 인증정보λ₯Ό κ³ λ₯Ό λ•Œ λ°œμƒν•˜λŠ”
hostname ν˜Όλ™μž…λ‹ˆλ‹€.

- `0.7.0`: `cr.io`κ°€ `ghcr.io` λ¬Έμžμ—΄ μ•ˆμ— μžˆλ‹€λŠ” 이유둜
  `ghcr.io` 인증정보λ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.
- `0.7.1`: hostname을 μ •κ·œν™”ν•œ λ’€ μ •ν™•νžˆ μΌμΉ˜ν•˜λŠ” μΈμ¦μ •λ³΄λ§Œ
  μ„ νƒν•©λ‹ˆλ‹€.

이 μ €μž₯μ†ŒλŠ” 두 κ°€μ§€ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μžλ™ κ²€μ¦ν•©λ‹ˆλ‹€.

1. **collision**: `ghcr.io` μΈμ¦μ •λ³΄λ§Œ μžˆλŠ”λ° λŒ€μƒμ€ `cr.io`
2. **exact**: λŒ€μƒκ³Ό μ •ν™•νžˆ μΌμΉ˜ν•˜λŠ” `cr.io` 인증정보가 있음

μ·¨μ•½ 버전은 첫 번째 μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ 인증정보λ₯Ό 잘λͺ» μ„ νƒν•˜κ³ , μˆ˜μ •
버전은 κ±°λΆ€ν•΄μ•Ό ν•©λ‹ˆλ‹€. 두 버전 λͺ¨λ‘ 두 번째 정상 μ‹œλ‚˜λ¦¬μ˜€λŠ”
성곡해야 ν•©λ‹ˆλ‹€.

## μ•ˆμ „μž₯치

- μ‹€μ œ `~/.docker/config.json`을 μ½κ±°λ‚˜ μˆ˜μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
- μ €μž₯μ†Œ μ•ˆμ˜ μ „μš© `HOME`κ³Ό λ¬΄κ°€μΉ˜ν•œ κ°€μ§œ μΈμ¦μ •λ³΄λ§Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
- `HOME`, 랩 ν‘œμ‹, κ°€μ§œ 값이 λͺ¨λ‘ μ •ν™•ν•  λ•Œλ§Œ νŒ¨ν‚€μ§€λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
- 이 ν…ŒμŠ€νŠΈκ°€ ν˜ΈμΆœν•˜λŠ” APIλŠ” 둜컬 νŒŒμΌμ—μ„œ 인증정보λ₯Ό 선택할 뿐
  Registry에 λ„€νŠΈμ›Œν¬ μš”μ²­μ„ 보내지 μ•ŠμŠ΅λ‹ˆλ‹€.
- probe μžμ‹ ν”„λ‘œμ„ΈμŠ€μ—μ„œλŠ” HTTP(S), TCP, TLS, DNS, `fetch` ν˜ΈμΆœμ„
  tripwire둜 λ§‰μŠ΅λ‹ˆλ‹€.
- μžμ‹ ν”„λ‘œμ„ΈμŠ€μ— ν˜„μž¬ μ„Έμ…˜μ˜ 토큰·Docker ν™˜κ²½λ³€μˆ˜λ₯Ό μƒμ†ν•˜μ§€
  μ•ŠμŠ΅λ‹ˆλ‹€.
- stdout/stderr와 감사 결과에 κ°€μ§œ 토큰쑰차 λ‚˜νƒ€λ‚˜μ§€ μ•ŠλŠ”μ§€
  ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€.

μ·¨μ•½ νŒ¨ν‚€μ§€λ₯Ό μ˜λ„μ μœΌλ‘œ μ„€μΉ˜ν•˜λ―€λ‘œ 이 μ €μž₯μ†ŒλŠ” `"private": true`인
ꡐ윑용 λž©μž…λ‹ˆλ‹€. μ œν’ˆ μ½”λ“œμ˜ μ˜μ‘΄μ„±μœΌλ‘œ μ‚¬μš©ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€.
이 λ•Œλ¬Έμ— `npm audit`κ°€ 0.7.0을 λ³΄κ³ ν•˜λŠ” 것은 μ˜ˆμƒλœ 결과이며,
μ˜ˆμ™Έμ˜ λ²”μœ„μ™€ μ΄μœ λŠ” [`SECURITY.md`](SECURITY.md)에 κΈ°λ‘ν–ˆμŠ΅λ‹ˆλ‹€.

## μ‹€ν–‰

μš”κ΅¬ 사항: Node.js 22.22.2+, 24.15.0+ λ˜λŠ” 26 이상. ꢌμž₯ 버전은
`.nvmrc`에 κ³ μ •ν–ˆμŠ΅λ‹ˆλ‹€.

```bash
npm install --ignore-scripts
npm test
npm run demo
npm run audit:fixture
npm run evidence
```

`npm run demo`의 핡심 μ˜ˆμƒ κ²°κ³Ό:

```text
0.7.0  collision  credential-selected
0.7.1  collision  credential-rejected
0.7.0  exact      credential-selected
0.7.1  exact      credential-selected

Regression result: PASS
```

## 이 ν”„λ‘œμ νŠΈκ°€ λ³΄μ—¬μ£ΌλŠ” μ—­λŸ‰

- μ‹€μ œ CVE의 λ°œμƒ 쑰건을 μ½”λ“œ μˆ˜μ€€μ—μ„œ μ„€λͺ…ν•˜κ³  μ•ˆμ „ν•˜κ²Œ μž¬ν˜„
- μ·¨μ•½ 버전과 μˆ˜μ • 버전을 동일 μ‘°κ±΄μ—μ„œ λΉ„κ΅ν•˜λŠ” νšŒκ·€ ν…ŒμŠ€νŠΈ 섀계
- 곡개 CVSS와 λ³„λ„λ‘œ μ‹€μ œ ν™˜κ²½μ˜ 곡격 μ „μ œμ‘°κ±΄μ„ 평가
- 발견 β†’ 영ν–₯ 뢄석 β†’ μˆ˜μ • 검증 β†’ ν†΅μ œλ‘œ μ΄μ–΄μ§€λŠ” 취약점 관리
- μ‹€μ œ 인증정보λ₯Ό κ±΄λ“œλ¦¬μ§€ μ•ŠλŠ” μ‹€νŒ¨ μ•ˆμ „ν˜• λ³΄μ•ˆ ν…ŒμŠ€νŠΈ

## μΆœμ²˜μ™€ λ²”μœ„

- [GitHub Security Advisory GHSA-pf56-329r-95rw](https://github.com/sigstore/sigstore-js/security/advisories/GHSA-pf56-329r-95rw)
- [NVD CVE-2026-59891](https://nvd.nist.gov/vuln/detail/CVE-2026-59891)

이 ν”„λ‘œμ νŠΈλŠ” μ œν•œλœ ꡐ윑용 ν†΅μ œ ν‰κ°€μž…λ‹ˆλ‹€. CISA 자격, ISMS-P
인증 λ˜λŠ” νŠΉμ • 쑰직의 κ·œμ • μ€€μˆ˜λ₯Ό λœ»ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μƒμ„Έν•œ λ²”μœ„, ν…ŒμŠ€νŠΈ, μœ„ν—˜ 및 ν†΅μ œ λ¬Έμ„œλŠ” [`docs/`](docs/)에 있으며,
`npm run evidence`λŠ” μž¬ν˜„ κ°€λŠ₯ν•œ μ‹€ν–‰ 증적과 SHA-256 manifestλ₯Ό
μƒμ„±ν•©λ‹ˆλ‹€.