[Hardening] Validate legacy block_headers length before slicing (F-007)
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- backend-api-design, security
Direzione di ricerca
Inizia dalle righe 1062–1068 di raw_client.rs nella revisione interessata e segui la gestione della risposta legacy di blockchain.block.headers per il protocollo 1.4. Verifica come vengono usati la lunghezza degli header decodificati e count prima dello slicing, quindi aggiungi test di regressione per header vuoti e troncati e per conteggi non corrispondenti. L’obiettivo è raggiunto quando le risposte malformate restituiscono un errore di protocollo senza causare un panic, mentre una risposta valida degli header continua a funzionare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
In rust-electrum-client 0.25.2 (reported upstream commit 7c1d759e2789b5e46fcae1525ab06ff4012bc668), the pre-1.6 legacy response path for blockchain.block.headers trusts the server-controlled result.count and slices the decoded header bytes in fixed 80-byte chunks without validating the available length. A malicious or compromised Electrum server (or an attacker able to alter the Electrum connection) can make a release build panic, causing client/wallet availability loss.
Reproduction
- Build the client in release mode.
- Connect to a mock TCP Electrum server.
- Negotiate protocol version 1.4.
- Return this response to blockchain.block.headers:
{"jsonrpc":"2.0","id":1,"result":{"count":1,"max":8,"hex":""}}
Observed:
range end index 80 out of range for slice of length 0
A negative control containing one valid 80-byte header with count=1 returns normally. A count=3 response containing only one header panics at the second slice.
Source
Reported source location: raw_client.rs lines 1062–1068 (in the affected revision).
Suggested hardening
- Validate the decoded header byte length (and its consistency with count) before fixed-size slicing.
- Return a normal protocol error on mismatch instead of panicking.
- Add regression tests for empty/truncated headers and mismatched counts.
This is a hardening issue: the demonstrated impact is availability loss in release mode; no fund or privacy compromise was observed.
- Lingua principale
- Rust
- Stelle
- 89
- Fork
- 87
- Merge medio
- 1h 25m
- PR unite (30g)
- 4
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di bitcoindevkit/rust-electrum-client
-
[Hardening] Reject non-object JSON notifications without panicking (F-008)Forse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
bitcoindevkit/rust-electrum-client#221 · 1 commento ·
-
use-rustls-ring transitively enables rustls/default (aws-lc-rs), breaking ring-only buildsForse già presa @EddieHouston l’ha presa 130 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
-
discussion new feature
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
bitcoindevkit/rust-electrum-client#211 · 2 commenti ·
-
Rework CI to use `cargo-rbmt`Forse di nuovo libera @luisschwab l’ha presa 205 giorni fa e non c’è nessuna pull request aperta. Aperta
bitcoindevkit/rust-electrum-client#202 · 1 assegnatario ·
Tutte le issue di bitcoindevkit/rust-electrum-client
Issue simili
-
Panic on live viewport resize when unstyled elements exist in display: none subtreeForse già presa @GoCoder7 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
DioxusLabs/blitz#1488 ·
I maintainer di solito rispondono entro 1 giorno
-
🏷️ good first issue enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
S-Needs triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
vectordotdev/vrl#2042 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno