[Hardening] Validate legacy block_headers length before slicing (F-007)
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- rust
- Área
- backend-api-design, security
Línea de trabajo
Empieza en las líneas 1062–1068 de raw_client.rs en la revisión afectada y sigue el procesamiento de la respuesta heredada de blockchain.block.headers para el protocolo 1.4. Comprueba cómo se usan la longitud de los encabezados decodificados y count antes de dividirlos en segmentos, y añade pruebas de regresión para encabezados vacíos y truncados, así como para recuentos que no coinciden. El objetivo se cumple cuando las respuestas malformadas devuelven un error de protocolo sin provocar un panic, y una respuesta válida de encabezados sigue funcionando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Rust
- Estrellas
- 89
- Forks
- 87
- Merge medio
- 1 h 25 min
- PR fusionados (30 d)
- 4
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de bitcoindevkit/rust-electrum-client
-
[Hardening] Reject non-object JSON notifications without panicking (F-008)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
bitcoindevkit/rust-electrum-client#221 · 1 comentario ·
-
use-rustls-ring transitively enables rustls/default (aws-lc-rs), breaking ring-only buildsPosiblemente ocupada @EddieHouston la tomó hace 130 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
discussion new feature
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
bitcoindevkit/rust-electrum-client#211 · 2 comentarios ·
-
Rework CI to use `cargo-rbmt`Quizá libre de nuevo @luisschwab la tomó hace 205 días y no hay ningún pull request abierto. Abierto
bitcoindevkit/rust-electrum-client#202 · 1 asignado ·
Todos los issues de bitcoindevkit/rust-electrum-client
Issues similares
-
Panic on live viewport resize when unstyled elements exist in display: none subtreePosiblemente ocupada @GoCoder7 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
DioxusLabs/blitz#1488 ·
Los mantenedores suelen responder en 1 día
-
🏷️ good first issue enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
Los mantenedores suelen responder en 1 día
-
S-Needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
vectordotdev/vrl#2042 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día