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

El ‘derecho a desconectar’ debería ser un derecho fundamental en toda la UE, dicen los eurodiputados

https://www.youtube.com/watch?v=XJj0Lv2POf4 Christine Lagarde, presidenta del Banco Central Europeo, compartió las conclusiones del Consejo de Gobierno mensual del Euro. El Consejo ha decidido reconfirmar...

‘Creo que Roger Federer jugará después de …’, dice el ex as de la ATP

Rafael Nadal ganó Roland Garros por decimotercera vez el año pasado y alcanzó el récord de Grand Slam de Roger Federer. Ambos...

Machu Picchu apunta a convertirse en carbono neutral para el 2050.

Una de las siete maravillas del mundo, Machu Picchu tiene como objetivo convertirse en un sitio carbono neutral y el gobierno está haciendo...

DJ Spinderella habla sobre ser excluido de la próxima película biográfica de Salt-N-Pepa Lifetime

Salt-N-Pepa son las últimas leyendas del hip-hop en contar su historia en una película biográfica y con su película Lifetime estrenada el sábado,...
31.5k Followers
Follow

Related articles

Leave a reply

Please enter your comment!
Please enter your name here

Translate »