seguridad: ¿qué es una lectura no inicializada? ¿Puede señalar algunos ejemplos que se encuentran en Bitcoin Core? ¿Cómo los detecta?


Una lectura no inicializada es cuando se crea una variable sin un valor inicial y luego se lee el valor de esta variable. Esto debe evitarse ya que el comportamiento resultante es impredecible y podría ser diferente cada vez que se ejecuta el programa. De acuerdo a cppreference.com:

Normalmente, las variables no inicializadas son una mala idea, y el único lugar donde son útiles es cuando está a punto de leer la variable desde algún flujo de entrada.

Hay varias herramientas para detectar lecturas no inicializadas, algunas de las cuales se trataron en este club de revisión de Bitcoin Core PR. sesión en diciembre de 2019.

Estos incluyen herramientas de análisis dinámico como MemorySanitizer (MSan), Valgrind (específicamente Memcheck) y herramientas de análisis estático que examinan el código sin ejecutarlo.

Las lecturas no inicializadas también se pueden encontrar a través de pruebas unitarias, funcionales o fuzz, compilando con el -Werror=uninitialized bandera o compilar con Clang con el -ftrivial-auto-var-init=pattern bandera que preinicializará las variables con valores ficticios.

La lectura no inicializada detectada más recientemente en el momento de escribir este artículo (octubre de 2020) fue encontrada por Marco Falke en Signet recientemente fusionado. código. Lo encontró a través de una revisión visual y fue detectado antes de que se convirtiera en una versión importante de Bitcoin Core.

Prácticamente rápido Destacar Ha habido varios ejemplos de lecturas no inicializadas encontradas en los últimos años, pero con un uso más generalizado de herramientas sofisticadas, es probable que se encuentren con una frecuencia decreciente.

2020: Uso de memoria no inicializada en el código de red Erlay – encontrado antes de la fusión

2020: Uso de memoria no inicializada en el código de serializador / desserializador de transporte p2p cifrado BIP324 (verdad en la publicidad: no he verificado este escribiendo un PoC) – encontrado pre-merge

2020: util: Evite una posible lectura no inicializada en FormatISO8601DateTime (int64_t) marcando gmtime_s / gmtime_r return

2019: Uso de memoria no inicializada en código de red al recibir una transacción que ya tenemos – encontrado después de la fusión

2019: billetera: lectura no inicializada en bumpfee (…)

2018: billetera: corrige el no determinismo en ParseHDKeypath (…). Evite el uso de una variable no inicializada en el cálculo de la ruta.

2018: billetera: Se corrige el uso del valor no inicializado bnb_used en CWallet :: CreateTransaction (…)

2017: [net] Se corrigió el uso de valor no inicializado en getnetworkinfo (const JSONRPCRequest &)

2017: [test] Evite leer una variable potencialmente no inicializada en tx_invalid-test (transaction_tests.cpp)

Latest articles

Astroturfing COVID Agitprop, por Michelle Malkin

Atención, padres: si sus hijos están en línea, están siendo bombardeados por una campaña de relaciones públicas ineludible por parte de todas las...

Despedida del presidente de EPI

Ha sido un honor, un privilegio y una alegría dirigir el Instituto de Política Económica durante los últimos tres años y medio. ...

Probé el tratamiento de belleza número uno en Corea

Hola, hola, la hermana pequeña de Lauryn, Mimi, está aquí hoy para compartir un poco...

Pescadores franceses amenazan con bloquear el puerto de Calais por disputa del Brexit – POLITICO

PARÍS - Los principales sindicatos franceses amenazan con bloquear el puerto de Calais en un plazo de 15 días si los pescadores no...
49.6k Followers
Follow

Related articles

Leave a reply

Please enter your comment!
Please enter your name here

Translate »