What changed, and why it matters
This commit hardens the Krux documentation website by removing all embedded third-party content (YouTube thumbnails, Google Fonts, gitmind.com iframes) and adding a browser-level Content-Security-Policy. The goal is to prevent attackers who compromise a third-party service (like a CDN) from injecting malicious code into visitors' browsers when they read the docs. It is a preventive security improvement, not a fix for an active vulnerability in Krux's hardware wallet firmware itself.
No immediate action required. This is a defensive hardening change. Reviewers should verify the CSP does not break site functionality (search, navigation, theme switching) and consider adding equivalent HTTP response headers at the hosting layer, since meta CSP cannot set frame-ancestors or X-Frame-Options.
Security signals we found
Content-Security-Policy meta tag added to documentation site
Third-party iframe sources removed (gitmind.com)
Third-party font loading disabled (Google Fonts)
Third-party image loading removed (YouTube thumbnails)
Inline emoji shortcodes replaced with local Material icons
Commit message references polyfill.io-style CDN injection risk
Evidence from the diff
The patch makes the MkDocs/Material docs site self-contained: it disables Google Fonts, replaces emoji shortcodes with inline Material icons, deletes gitmind.com mind-map iframes, converts YouTube video embeds to plain text links, and adds a CSP meta tag in overrides/main.html. The CSP restricts scripts/styles/fonts/connect to ‘self’, allows inline scripts/styles (required by Material), blocks frames and objects, and limits images to ‘self’ plus data URIs. The commit message explicitly references the polyfill.io supply-chain incident as motivation.
Changed components
Krux documentation website (MkDocs/Material)docs/video-tutorials.en.mddocs/getting-started/navigation.en.mddocs/parts.en.mddocs/support.en.mddocs/css/custom.cssmkdocs.ymloverrides/main.htmlInspect captured patch +48 / −286
diff --git a/docs/css/custom.css b/docs/css/custom.css
index 1cfd96b..02fca8d 100644
--- a/docs/css/custom.css
+++ b/docs/css/custom.css
@@ -49,63 +49,6 @@ img.m5stickv.big {
}
}
-div.group-2 {
- display: flex;
- flex-wrap: wrap;
-}
-
-div.group-2 div.video:first-child {
- margin-right: auto;
-}
-
-div.video {
- max-width: 480px;
- padding-bottom: 2em;
-}
-
-div.video p {
- margin-top: 0;
- margin-bottom: 5px;
-}
-
-div.video img {
- margin: 0 !important;
-}
-
-div.video p {
- font-weight: 700;
-}
-
-div.play-group {
- position: relative;
-}
-
-.play-button {
- position: absolute;
- top: 40%;
- left: 44%;
- color: white;
- width: 60px;
- height: 60px;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 20px;
- pointer-events: none;
- background: rgba(0, 0, 0, 0.7);
- border-radius: 50%;
- padding-left: 5px;
-}
-
-div.play-group:hover .play-button {
- transform: scale(1.1);
- background: rgba(255, 0, 0, 0.8);
-}
-
-div.clear {
- clear: both;
-}
-
.margin-left {
margin-left: 0.8em;
}
\ No newline at end of file
diff --git a/docs/getting-started/navigation.en.md b/docs/getting-started/navigation.en.md
deleted file mode 100644
index 9390dc5..0000000
--- a/docs/getting-started/navigation.en.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Below is the mind map representation of the currently menus available. Click the circle with a number (Ex.: :material-numeric-3-circle-outline:) to the right of each node to expand and explore. Also, enable full screen in the top right menu for better viewing :wink:.
-
-### Login Menu
-<iframe width="1000" height="800" src="https://gitmind.com/app/docs/m93096x3"; allowfullscreen></iframe>
-
-### Home Menu (Loaded a mnemonic)
-<iframe width="1000" height="800" src="https://gitmind.com/app/docs/mwxxknab"; allowfullscreen></iframe>
diff --git a/docs/parts.en.md b/docs/parts.en.md
index 91026f2..f94e0ba 100644
--- a/docs/parts.en.md
+++ b/docs/parts.en.md
@@ -6,11 +6,11 @@
| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
| Price range | US$ 50-55 | US$ 50-85 | US$ 27-35 | US$ 45-61 | US$ 34-49 | US$ 58-86 | US$ 48 | US$ 74 |
| Screen size /<br> Res. px /<br> PPI | 1.14" /<br> 135 x 240 /<br> 241 | 3.5" /<br> 320 x 480 /<br> 165 | 2.4" /<br> 240 x 320 /<br> 167 | 2" /<br> 240 x 320 /<br> 200 | 1.3" /<br> 240 x 240 /<br> 261 | 2" /<br> 240 x 320 /<br> 200| 2" /<br> 240 x 320 /<br> 200 | 2.4" /<br> 240 x 320 /<br> 167 |
-| Brightness control | :white_check_mark: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: |
+| Brightness control | :material-check: | :material-close: | :material-close: | :material-close: | :material-check: | :material-check: | :material-close: | :material-close: |
| Device size | 48 x 24 x 22mm | 104 x 63 x 17mm | 98 x 59 x 18mm | 57 x 41 x 17mm | 40 x 40 x 16mm | 59 x 41 x 17mm | 57 x 41 x 16mm | 63 x 45 x 14mm |
-| Touchscreen | :x: | Capacitive | :x: | Capacitive | :x: | Capacitive | Capacitive | Capacitive |
+| Touchscreen | :material-close: | Capacitive | :material-close: | Capacitive | :material-close: | Capacitive | Capacitive | Capacitive |
| Camera | `OV7740` | `OV7740` rear /<br>`GC0328` front | `GC0328` | `OV2640` <i style="font-size: 85%">(VER:1.0)</i> or<br>`GC2145` <i style="font-size: 85%">(VER:1.1)</i> | `OV7740` | `GC2145` | `GC2145` or<br>`GC0328` | `OV2640` or<br>`GC2145` |
-| Battery | 200mAh | 520mAh | :x: | :x: | 200mAh | :x: | :x: | :x: |
+| Battery | 200mAh | 520mAh | :material-close: | :material-close: | 200mAh | :material-close: | :material-close: | :material-close: |
| Requirements | None | None | [Rotary encoder](https://duckduckgo.com/?q=ky-040)<br> [3D printed case](https://github.com/selfcustody/DockEncoderCase)<br> Soldering<br>Assembly | None | None | None | None | None |
| Warnings | [:material-numeric-1-circle:{ title="USB-C recognition" }](#pull-up-resistor-info) | [:material-numeric-2-circle:{ title="Maix Amigo screens" }](#amigo-info) | [:material-numeric-3-circle:{ title="Maix Dock and soldered pin" }](#dock-info) | Micro USB | 3-Way button | [:material-numeric-1-circle:{ title="USB-C recognition" }](#pull-up-resistor-info) [:material-numeric-4-circle:{ title="WonderMV and SD card" }](#wondermv-info) | None | [:material-numeric-5-circle:{ title="Embed Fire loose touchscreen" }](#embedfire-info) |
diff --git a/docs/support.en.md b/docs/support.en.md
index 038a58e..1b0bb96 100644
--- a/docs/support.en.md
+++ b/docs/support.en.md
@@ -5,7 +5,7 @@ hide:
## Ways you can help
### Development
-Audit the code, file an issue, make a pull request, or do all three :smiley:.
+Audit the code, file an issue, make a pull request, or do all three :material-emoticon-happy:.
### Documentation
*"I'd like to see Krux help as many people as possible, and to do that, good documentation is needed. If you identify a better way to say something, please make a PR, any help is appreciated."* - Jeff
diff --git a/docs/video-tutorials.en.md b/docs/video-tutorials.en.md
index e2ac231..527ddf2 100644
--- a/docs/video-tutorials.en.md
+++ b/docs/video-tutorials.en.md
@@ -2,229 +2,30 @@ Most people prefer to learn by watching videos, and we are fortunate to have exc
## English
-<div markdown="1" class="group-2">
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=EtV_Iw6a0O0)
-<div class="play-button">▶</div>
-</div>
-
-Krux on Maix Amigo + Blue Wallet - DIY Bitcoin Hardware Wallet (Similar to SeedSigner)
-
-<small>Crypto Guide (Dec 2022)</small>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=rsdvmIcucwQ1)
-<div class="play-button">▶</div>
-</div>
-
-Krux on M5StickV + Sparrow Wallet - DIY Bitcoin Hardware Wallet (Similar to SeedSigner)
-
-<small>Crypto Guide (Jan 2023)</small>
-</div>
-</div>
-
-<div markdown="1" class="group-2">
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=JfK2m8ucuxU)
-<div class="play-button">▶</div>
-</div>
-
-DIY-Only Multivendor Hardware Wallet MultiSig: SeedSigner, Jade, Krux, Satochip + Sparrow & Electrum
-
-<small>Crypto Guide (Sep 2023)</small>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=Vmr_TFy2TfQ)
-<div class="play-button">▶</div>
-</div>
-
-Krux DIY Bitcoin Signer: Build From Source & Verify (With Windows + WSL2 + Docker)
-
-<small>Crypto Guide (Mar 2024)</small>
-</div>
-</div>
-
-<div markdown="1" class="group-2">
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=WiwmpO1k2zA)
-<div class="play-button">▶</div>
-</div>
-
-BUILD Your Own Bitcoin Hardware Security Device NOW: KRUX
-
-<small>BTC Sessions (Mar 2025)</small>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=HK8FtbUePa8)
-<div class="play-button">▶</div>
-</div>
-
-Bitcoin Security for Under $50: Building a Krux Hardware Wallet
-
-<small>Sovereign Money (May 2025)</small>
-</div>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=L7uAG5Cyx5o)
-<div class="play-button">▶</div>
-</div>
-
-Self-Custody Krux Hardware Wallet Tutorial
-
-<small>The Bitcoin Hardware Store (Jul 2025)</small>
-</div>
-
-<div class="clear"></div>
+- [Krux on Maix Amigo + Blue Wallet - DIY Bitcoin Hardware Wallet (Similar to SeedSigner)](https://www.youtube.com/watch?v=EtV_Iw6a0O0) — Crypto Guide (Dec 2022)
+- [Krux on M5StickV + Sparrow Wallet - DIY Bitcoin Hardware Wallet (Similar to SeedSigner)](https://www.youtube.com/watch?v=rsdvmIcucwQ1) — Crypto Guide (Jan 2023)
+- [DIY-Only Multivendor Hardware Wallet MultiSig: SeedSigner, Jade, Krux, Satochip + Sparrow & Electrum](https://www.youtube.com/watch?v=JfK2m8ucuxU) — Crypto Guide (Sep 2023)
+- [Krux DIY Bitcoin Signer: Build From Source & Verify (With Windows + WSL2 + Docker)](https://www.youtube.com/watch?v=Vmr_TFy2TfQ) — Crypto Guide (Mar 2024)
+- [BUILD Your Own Bitcoin Hardware Security Device NOW: KRUX](https://www.youtube.com/watch?v=WiwmpO1k2zA) — BTC Sessions (Mar 2025)
+- [Bitcoin Security for Under $50: Building a Krux Hardware Wallet](https://www.youtube.com/watch?v=HK8FtbUePa8) — Sovereign Money (May 2025)
+- [Self-Custody Krux Hardware Wallet Tutorial](https://www.youtube.com/watch?v=L7uAG5Cyx5o) — The Bitcoin Hardware Store (Jul 2025)
## Portuguese
-<div markdown="1" class="group-2">
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=YbV6_p_eti4)
-<div class="play-button">▶</div>
-</div>
-
-Hardwallet Krux fácil de instalar + QRs criptografados
-
-<small>Bitcoinheiros (Jul 2023)</small>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=Gdynhj6EnEg)
-<div class="play-button">▶</div>
-</div>
-
-Multisig com Krux e Nunchuk no celular
-
-<small>Bitcoinheiros (Jul 2023)</small>
-</div>
-</div>
-
-<div markdown="1" class="group-2">
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=Zajy7HAQiwE)
-<div class="play-button">▶</div>
-</div>
-
-Usando a Krux com impressora térmica
-
-<small>Bitcoinheiros (Aug 2023)</small>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=hhMYq75pAOc)
-<div class="play-button">▶</div>
-</div>
-
-Como instalar a carteira Krux no celular
-
-<small>João Trein (Feb 2024)</small>
-</div>
-</div>
-
-<div markdown="1" class="group-2">
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=1V6Lp0m8esc)
-<div class="play-button">▶</div>
-</div>
-
-Faça sua hardware wallet em casa com a KRUX!
-
-<small>CAIOVSKI (Jun 2024)</small>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=8k2RivwnHUc)
-<div class="play-button">▶</div>
-</div>
-
-MAIX CUBE + KRUX É UMA BOA CARTEIRA?
-
-<small>DIG P2P - Bitcoin Para Iniciantes! (Nov 2025)</small>
-</div>
-</div>
-
-<div class="clear"></div>
+- [Hardwallet Krux fácil de instalar + QRs criptografados](https://www.youtube.com/watch?v=YbV6_p_eti4) — Bitcoinheiros (Jul 2023)
+- [Multisig com Krux e Nunchuk no celular](https://www.youtube.com/watch?v=Gdynhj6EnEg) — Bitcoinheiros (Jul 2023)
+- [Usando a Krux com impressora térmica](https://www.youtube.com/watch?v=Zajy7HAQiwE) — Bitcoinheiros (Aug 2023)
+- [Como instalar a carteira Krux no celular](https://www.youtube.com/watch?v=hhMYq75pAOc) — João Trein (Feb 2024)
+- [Faça sua hardware wallet em casa com a KRUX!](https://www.youtube.com/watch?v=1V6Lp0m8esc) — CAIOVSKI (Jun 2024)
+- [MAIX CUBE + KRUX É UMA BOA CARTEIRA?](https://www.youtube.com/watch?v=8k2RivwnHUc) — DIG P2P - Bitcoin Para Iniciantes! (Nov 2025)
## Korean
-<div markdown="1" class="group-2">
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=7H1bI0A2y0w)
-<div class="play-button">▶</div>
-</div>
-
-Krux 월렛 설치 및 검증 방법(feat : 원더케이 비트코인 전용 하드월렛)
-
-<small>봉현이형 (Oct 2024)</small>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=NTsZCHbQXgc&list=PLetYvN5q3ZS9m1sf7_MJ1It-t8O87xEeB&index=2)
-<div class="play-button">▶</div>
-</div>
-
-나만의 비트코인 지갑 만들기(2강_1부 개인키 생성)
-
-<small>봉현이형 (Nov 2024)</small>
-</div>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=1_JSJ1uzPzQ)
-<div class="play-button">▶</div>
-</div>
-
-안사면 손해? 세상에서 가장 투명한 비트코인 전용 지갑(원더케이 하드월렛)
-
-<small>봉현이형 (Oct 2024)</small>
-</div>
-
-<div class="clear"></div>
+- [Krux 월렛 설치 및 검증 방법(feat : 원더케이 비트코인 전용 하드월렛)](https://www.youtube.com/watch?v=7H1bI0A2y0w) — 봉현이형 (Oct 2024)
+- [나만의 비트코인 지갑 만들기(2강_1부 개인키 생성)](https://www.youtube.com/watch?v=NTsZCHbQXgc&list=PLetYvN5q3ZS9m1sf7_MJ1It-t8O87xEeB&index=2) — 봉현이형 (Nov 2024)
+- [안사면 손해? 세상에서 가장 투명한 비트코인 전용 지갑(원더케이 하드월렛)](https://www.youtube.com/watch?v=1_JSJ1uzPzQ) — 봉현이형 (Oct 2024)
## Chinese
-<div markdown="1" class="group-2">
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=stqf5qhs_tQ)
-<div class="play-button">▶</div>
-</div>
-
-1.Krux比特币硬件钱包介绍
-
-<small>九神二号 (Jan 2025)</small>
-</div>
-
-<div markdown="1" class="video">
-<div markdown="1" class="play-group">
-[](https://www.youtube.com/watch?v=AciSXdzOK5I)
-<div class="play-button">▶</div>
-</div>
-
-2.Krux比特币硬件钱包刷机教程
-
-<small>九神二号 (Jan 2025)</small>
-</div>
-
-<div class="clear"></div>
+- [1.Krux比特币硬件钱包介绍](https://www.youtube.com/watch?v=stqf5qhs_tQ) — 九神二号 (Jan 2025)
+- [2.Krux比特币硬件钱包刷机教程](https://www.youtube.com/watch?v=AciSXdzOK5I) — 九神二号 (Jan 2025)
diff --git a/mkdocs.yml b/mkdocs.yml
index f0a22c6..dfdae6b 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -22,6 +22,9 @@ extra_css:
theme:
name: material
+ custom_dir: overrides
+ # Use the system font stack instead of fetching Roboto from Google Fonts.
+ font: false
logo: img/favicon.png
favicon: img/favicon.png
palette:
@@ -113,7 +116,6 @@ nav:
- Tamper Detection: getting-started/features/tamper-detection.en.md
- Mnemonic XOR: getting-started/features/mnemonic-xor.en.md
- Interface:
- - Navigation overview: getting-started/navigation.en.md
- Settings: getting-started/settings.en.md
- Templates: getting-started/templates/templates.en.md
- Video Tutorials: video-tutorials.en.md
diff --git a/overrides/main.html b/overrides/main.html
new file mode 100644
index 0000000..c0e5ae7
--- /dev/null
+++ b/overrides/main.html
@@ -0,0 +1,23 @@
+{% extends "base.html" %}
+
+{#
+ Content-Security-Policy hardening.
+
+ The docs reference no third party assets: fonts use the system stack, emoji
+ and icons render as inline Material SVG, and math is pre rendered to local
+ SVG. So the published site loads no remote scripts, styles, or fonts, and this
+ policy enforces that at the browser level. A CDN compromise, or an accidental
+ re-introduction of a remote <script> (as happened with the polyfill.io
+ incident), cannot execute on the docs.
+
+ 'unsafe-inline' is required only for the small inline <script>/<style> that
+ Material emits; it still forbids loading scripts from any other origin, which
+ is the actual supply chain risk. The site embeds no third party frames, so
+ frame-src is 'none'.
+
+ Note: frame-ancestors and X-Frame-Options require real HTTP response headers
+ and are ignored when set from a static <meta> tag on GitHub Pages.
+#}
+{% block extrahead %}
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-src 'none'; object-src 'none'; base-uri 'self'; form-action 'self'">
+{% endblock %}
Why this scored 42/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.