[P1][security] identity/TLS private material 저장 시 atomic write 및 0600 권한 보장 #30

Closed
opened 2026-05-02 04:34:07 +00:00 by boxqkrtm · 1 comment

문제

identity.json에는 relay private key, admin secret, WireGuard private key 등이 들어갑니다. crates/portal-relay/src/state/identity.rs와 self-signed TLS material 저장 경로는 fs::write() 기반으로 보여 Unix 권한 0600을 보장하지 않습니다.

관련 후보:

  • crates/portal-relay/src/state/identity.rs
  • crates/portal-relay/src/state/tls_material.rs
  • crates/portal-relay/src/state/acme.rs의 atomic/0600 구현 참고

위험

  • default umask/디렉터리 권한에 따라 private material이 다른 local user에게 노출될 수 있음
  • write 중 crash 시 partially written secret file 가능

제안

  • secret 파일은 atomic write + mode 0600 적용
  • secret directory는 가능하면 0700 적용
  • 기존 파일 permission이 느슨하면 warning 또는 자동 tighten
  • Windows 환경은 가능한 범위에서 best-effort 처리/documentation 추가

완료 기준

  • 새로 생성되는 identity/TLS secret file이 Unix에서 0600
  • write가 atomic replace 방식으로 수행
  • permission regression test 또는 platform-gated test 추가

검토 기준: 업로드된 Rust portal-relay 코드 정적 리뷰. 리뷰 환경에서는 cargo check/test/clippy를 실행하지 못했습니다.

## 문제 `identity.json`에는 relay private key, admin secret, WireGuard private key 등이 들어갑니다. `crates/portal-relay/src/state/identity.rs`와 self-signed TLS material 저장 경로는 `fs::write()` 기반으로 보여 Unix 권한 0600을 보장하지 않습니다. 관련 후보: - `crates/portal-relay/src/state/identity.rs` - `crates/portal-relay/src/state/tls_material.rs` - `crates/portal-relay/src/state/acme.rs`의 atomic/0600 구현 참고 ## 위험 - default umask/디렉터리 권한에 따라 private material이 다른 local user에게 노출될 수 있음 - write 중 crash 시 partially written secret file 가능 ## 제안 - secret 파일은 atomic write + mode 0600 적용 - secret directory는 가능하면 0700 적용 - 기존 파일 permission이 느슨하면 warning 또는 자동 tighten - Windows 환경은 가능한 범위에서 best-effort 처리/documentation 추가 ## 완료 기준 - 새로 생성되는 identity/TLS secret file이 Unix에서 0600 - write가 atomic replace 방식으로 수행 - permission regression test 또는 platform-gated test 추가 --- 검토 기준: 업로드된 Rust `portal-relay` 코드 정적 리뷰. 리뷰 환경에서는 `cargo check/test/clippy`를 실행하지 못했습니다.
Owner

수용했습니다. PR #62에서 relay identity와 self-signed TLS private material 저장을 atomic write + Unix 0600 파일 권한으로 바꾸고 secret directory는 0700으로 보정했습니다. 검증: cargo test --locked, cargo clippy --locked --all-targets -- -D warnings.

수용했습니다. PR #62에서 relay identity와 self-signed TLS private material 저장을 atomic write + Unix 0600 파일 권한으로 바꾸고 secret directory는 0700으로 보정했습니다. 검증: cargo test --locked, cargo clippy --locked --all-targets -- -D warnings.
gofix closed this issue 2026-05-03 18:58:39 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
gofix/portal-tunnel-rs#30
No description provided.