Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

157
Vistas
¿Ataque de cadena de formato?

Un aviso de seguridad reciente ( http://osdir.com/ml/bugtraq.security/2015-04/msg00102.html ) indicó que esta línea de código:

 fprintf(stderr, (isprint(adata->contents[i])) ? "%c " : "%02x", adata->contents[i]);

estaba sujeto a un " ataque de cadena de formato " que entiendo que usa algo como:

 fprintf(stderr, varWithUserSuppliedData);

en vez de:

 fprintf(stderr, "%s", varWithUserSuppliedData);

pero no veo eso en esa primera llamada fprintf - ¿qué me estoy perdiendo?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Gracias a @cremno por proporcionar un enlace al repositorio GIT para el archivo en cuestión: kssl.c (Tenga en cuenta que este no es el encabezado del repositorio).

Está claro que este informe es falso. En primer lugar, no hay ningún problema real con la llamada fprintf , aunque se puede argumentar que el código en un producto relacionado con la seguridad como OpenSSL debe ir más allá de ser seguro hasta el punto de ser visiblemente seguro incluso a simple vista. (No estoy seguro de que haría ese argumento, pero se ha hecho).

Pero lo que es más importante, el código en cuestión está deshabilitado (tenga en cuenta las directivas del preprocesador que lo rodean):

 # if 0 { int i; fprintf(stderr, "%s[at%d:%d] ", label, adata->ad_type, adata->length); for (i = 0; i < adata->length; i++) { fprintf(stderr, (isprint(adata->contents[i])) ? "%c " : "%02x", adata->contents[i]); } fprintf(stderr, "\n"); } # endif
over 4 years ago · Santiago Trujillo Denunciar

0

Esto parece un mensaje de error generado automáticamente. Obviamente, la herramienta no sabe qué cadena de formato se usará, por lo que no puede analizar la cadena de formato y los argumentos y declarar que el uso es seguro.

Una herramienta más inteligente podría descubrir que solo hay dos posibilidades para la cadena de formato, y que cada posibilidad es segura y no da un mensaje de error.

El código en sí es seguro. Por supuesto, se deshace del mensaje usando una instrucción if/else. Y en el código crítico para la seguridad, no solo arreglaría las cosas que están mal, sino también las cosas que se ven mal. Y nunca se sabe, después de convertir fprintf en un if/else, la herramienta podría detectar un problema real que todos pasamos por alto.

over 4 years ago · Santiago Trujillo Denunciar

0

El crédito debe ir a rici, pero todo se ve bien con el código.

Incluso si hay un problema, todo se puede imprimir de forma segura como char o hexadecimal.

Probablemente el problema podría estar en el ciclo for o while que opera sobre la cadena.

¿Podrías publicar el bucle también?

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda