[P0][security] hop route lookup/token 경로에 admin policy 적용 #25

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

문제

직접 lease 경로는 policy.is_identity_routable() 계열로 approval/deny/ban/IP ban을 확인하지만, hop route lookup/token 경로에서 route owner identity에 대한 policy 검사가 명확하지 않습니다.

관련 후보:

  • crates/portal-relay/src/relay/leases.rs
  • crates/portal-relay/src/relay/hop.rs
  • crates/portal-relay/src/relay/hop_mux.rs

위험

  • admin이 identity를 ban/deny해도 기존 hop route가 계속 라우팅될 수 있음
  • manual approval mode가 direct lease에만 적용되는 형태가 될 수 있음
  • hop route가 policy 우회 경로가 될 수 있음

제안

  • HopRouteRecord에 owner identity/public key를 명확히 저장
  • lookup_next_hop(), lookup_hop_token() 등 route resolution 경로에서 policy 확인
  • ban/deny/approval 변경 시 hop route를 즉시 무효화하거나 lookup 시 거부
  • admin snapshot/status에도 hop route owner와 policy 상태 노출

완료 기준

  • banned/denied/unapproved identity의 hop route는 lookup/token 발급 실패
  • IP ban도 hop route path에 반영
  • hop route policy enforcement 테스트 추가

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

## 문제 직접 lease 경로는 `policy.is_identity_routable()` 계열로 approval/deny/ban/IP ban을 확인하지만, hop route lookup/token 경로에서 route owner identity에 대한 policy 검사가 명확하지 않습니다. 관련 후보: - `crates/portal-relay/src/relay/leases.rs` - `crates/portal-relay/src/relay/hop.rs` - `crates/portal-relay/src/relay/hop_mux.rs` ## 위험 - admin이 identity를 ban/deny해도 기존 hop route가 계속 라우팅될 수 있음 - manual approval mode가 direct lease에만 적용되는 형태가 될 수 있음 - hop route가 policy 우회 경로가 될 수 있음 ## 제안 - `HopRouteRecord`에 owner identity/public key를 명확히 저장 - `lookup_next_hop()`, `lookup_hop_token()` 등 route resolution 경로에서 policy 확인 - ban/deny/approval 변경 시 hop route를 즉시 무효화하거나 lookup 시 거부 - admin snapshot/status에도 hop route owner와 policy 상태 노출 ## 완료 기준 - banned/denied/unapproved identity의 hop route는 lookup/token 발급 실패 - IP ban도 hop route path에 반영 - hop route policy enforcement 테스트 추가 --- 검토 기준: 업로드된 Rust `portal-relay` 코드 정적 리뷰. 리뷰 환경에서는 `cargo check/test/clippy`를 실행하지 못했습니다.
Owner

수용했습니다. PR #62에서 hop route lookup/token/public listing 경로가 route owner identity와 client IP에 대한 admin policy를 확인하도록 변경했습니다. 등록 자체는 manual approval 운영을 막지 않도록 허용하고, 실제 라우팅/노출 경로에서 거부합니다. 검증: cargo test --locked, cargo clippy --locked --all-targets -- -D warnings.

수용했습니다. PR #62에서 hop route lookup/token/public listing 경로가 route owner identity와 client IP에 대한 admin policy를 확인하도록 변경했습니다. 등록 자체는 manual approval 운영을 막지 않도록 허용하고, 실제 라우팅/노출 경로에서 거부합니다. 검증: cargo test --locked, cargo clippy --locked --all-targets -- -D warnings.
gofix closed this issue 2026-05-03 18:58:37 +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#25
No description provided.