-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeny.toml
More file actions
139 lines (125 loc) · 6.99 KB
/
Copy pathdeny.toml
File metadata and controls
139 lines (125 loc) · 6.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# cargo-deny 設定(Sprint 4-3)
#
# 目的:
# - 依存関係のライセンスポリシーを CI で強制
# - RustSec advisory DB との照合(cargo-audit を補完)
# - 不審な registry / git ソースの混入を防止
# - 重複バージョンや不要な crate の検出
#
# 実行方法(ローカル):
# cargo install cargo-deny --locked
# cargo deny check
#
# CI: .github/workflows/ci.yml の `deny` ジョブで自動実行
[graph]
# 全 feature を有効化したグラフでチェック
all-features = true
# Windows / macOS / Linux の主要ターゲットを対象
targets = [
{ triple = "x86_64-unknown-linux-gnu" },
{ triple = "x86_64-pc-windows-msvc" },
{ triple = "aarch64-apple-darwin" },
{ triple = "x86_64-apple-darwin" },
]
[output]
feature-depth = 1
# ─── 脆弱性データベース照合 ───────────────────────────────────────
[advisories]
version = 2
db-urls = ["https://github.com/rustsec/advisory-db"]
# Yanked クレートは警告のみ(ロックファイルが頻繁に更新されないため)
yanked = "warn"
# 既知の例外。新規追加は必ずコメントで「依存先 / 上流追跡 / 影響範囲」を記載。
# 棚卸しタイミング: Sprint 4-3 以降の月次依存レビューで再評価。
ignore = [
# paste クレートは unmaintained だが wgpu 22 / wasmi 38 に間接依存。
# 上流アップデート (wgpu 23+ / wasmi 0.40+) で解消見込み。
# 影響範囲: コンパイル時マクロのみで実行時影響なし。
{ id = "RUSTSEC-2024-0436", reason = "paste unmaintained; wgpu / wasmi 上流の更新待ち" },
# rsa 0.10.0-rc.16 の Marvin Attack (タイミングサイドチャネル) は
# russh 0.60 経由で依存。リモート攻撃にはネットワーク観測が必要で、
# nexterm のローカル使用パターンでは現実的なリスクは限定的。
# RustCrypto/RSA 側で constant-time 実装に移行中(GitHub issues/626)。
{ id = "RUSTSEC-2023-0071", reason = "rsa Marvin Attack; russh 経由、constant-time 実装移行待ち" },
# RUSTSEC-2025-0134 (rustls-pemfile): G5 で rustls-pki-types の PemObject API へ
# 移行済み。ignore エントリは削除済み。
# ttf-parser 0.25 はメンテナ宣言によりアーカイブ。cosmic-text → fontdb 経由の
# 間接依存で、cosmic-text の更新 (監査タスク C7) で解消予定。
# フォントは信頼済みローカルファイルのみ読むため実害は限定的。
{ id = "RUSTSEC-2026-0192", reason = "ttf-parser unmaintained; cosmic-text 更新 (C7) 待ち" },
# quick-xml の DoS 2 件 (重複属性チェックの二次時間 / NsReader の無制限割り当て)。
# notify-rust → tauri-winrt-notification / zbus 経由の間接依存で、パースするのは
# 自プロセス生成の通知 XML のみ(外部入力なし)。上流の quick-xml 更新待ち。
{ id = "RUSTSEC-2026-0194", reason = "quick-xml DoS; notify-rust 上流の更新待ち・外部入力をパースしない" },
{ id = "RUSTSEC-2026-0195", reason = "quick-xml DoS; notify-rust 上流の更新待ち・外部入力をパースしない" },
# lru の `LruCache::pop()` panic 安全性問題 (unsound)。発生条件は「キー型の
# Drop 実装が panic する」ことだが、当リポジトリのキーは GlyphKey (char +
# bool×3) / LigatureKey (String/usize/u32) — glyph_atlas.rs — で panic しうる
# Drop を持たず、ratatui-core 0.1 の内部キャッシュも同様のため経路が存在しない。
# 修正版 0.18.2+ は直依存 (0.17.0) には breaking change、ratatui-core 経由の
# 0.16.4 は上流更新待ち。月次依存レビューで再評価。
{ id = "RUSTSEC-2026-0253", reason = "lru pop() panic 安全性; キーに Drop panic 経路なし・0.18.2 更新は月次依存レビューで" },
# RUSTSEC-2025-0141 (bincode 1.x): Sprint 5-1 / G3 で postcard 1.x へ移行済み。
# ignore エントリは削除済み。
]
# ─── ライセンスポリシー ─────────────────────────────────────────
[licenses]
version = 2
# 許可するライセンス(permissive 系のみ)
# Copyleft 系(GPL / LGPL / AGPL)は明示的に拒否される
allow = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"BSD-2-Clause",
"BSD-3-Clause",
"BSL-1.0", # Boost Software License
"ISC",
"Zlib",
"MPL-2.0", # ファイル単位の copyleft(リンクは可)
"Unicode-DFS-2016", # unicode-ident 等
"Unicode-3.0", # ICU 系の最新版
"CC0-1.0", # public domain dedication
"CDLA-Permissive-2.0", # webpki-roots 等
"0BSD", # Zero-clause BSD
"OpenSSL", # ring / aws-lc-rs 由来(BoringSSL コード)
]
confidence-threshold = 0.8
# ライセンス記載が SPDX 識別子で表現できないクレートは個別に許可
[[licenses.exceptions]]
# ring は ISC AND MIT AND OpenSSL の混合だが LICENSE ファイルが特殊
allow = ["ISC", "MIT", "OpenSSL"]
crate = "ring"
# ─── 重複バージョン・禁止クレート ────────────────────────────────
[bans]
multiple-versions = "warn"
# 現状 workspace 内 crate 間の path 依存で `version = "*"` を多用している。
# allow-wildcard-paths は `publish = false` のクレートにしか適用されないため、
# crates.io 公開を想定したメタデータが付いている本リポジトリでは効かない。
# 中期改善: 各 crate に `publish.workspace = true` (workspace.package で false) を
# 設定したうえで `wildcards = "deny"` に戻す。
wildcards = "warn"
highlight = "all"
# workspace 内クレートは複数バージョンチェックの対象外
allow = []
# 明示的に禁止する crate(例: 既知の脆弱・非推奨パッケージ)
deny = [
# OpenSSL ネイティブバインディング(CLAUDE.md 方針: ring/rustls 統一)
# ただし依存ツリー内で間接的に出現する場合があるため警告レベル。
# 直接依存に追加された場合は CI で検出できる。
]
# 重複バージョンのうち skip 許可(ビルドが通らなくなるため一時的に許容)
skip = []
skip-tree = []
# ─── 信頼するソース ─────────────────────────────────────────────
[sources]
unknown-registry = "deny"
unknown-git = "deny"
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
allow-git = []
[sources.allow-org]
# GitHub Organization レベルでの git 依存許可(必要に応じて追加)
# 現時点では crates.io 公開クレートのみを使用
github = []
gitlab = []
bitbucket = []