2012-10-08 143 views
11

Estoy usando Fortify SCA para encontrar los problemas de seguridad en mi aplicación (como tarea universitaria). He encontrado algunos problemas de 'Forjar registro' de los que no puedo deshacerme.log forging fortify fix

Básicamente, me conecto algunos valores que vienen como entrada del usuario desde una interfaz web:

logger.warn("current id not valid - " + bean.getRecordId())); 

y Fortify informes esto como un registro de forja tema, debido a que el getRecordId() devuelve un entrada del usuario.

He seguido este article, y estoy reemplazando la 'nueva línea' con el espacio, pero el tema todavía se reporta

logger.warn("current id not valid - " + Util.replaceNewLine(bean.getRecordId())); 

Puede alguien sugerir una manera de solucionar este problema?

+0

mi humilde opinión, es todo acerca de los contenidos, :) como una buena práctica que hay que desinfectar la entrada del usuario, y esto se debe tratada como una advertencia de que en ciertas situaciones, como arquitecturas de software heterogéneas (llamada a la aplicación C de JAVA), la entrada de usuarios no humanizados puede ser peligrosa (reemplazar una nueva línea está lejos de una desinfección adecuada;), también los ataques de formato pueden presentar una amenaza, si un registro ID es un número (Largo, Entero, Doble) lo puedes omitir :), si es cadena también puedes omitirlo, pero recuerda al respecto :). – fatfredyy

Respuesta

6

Alina, en realidad soy el autor del artículo que usaste para resolver tu problema de inyección de logs. Espero que haya sido útil.

Vitaly es correcto con respecto a Fortify. Tendrá que crear lo que Fortify llama una "regla personalizada".

Es probable que sea una regla de limpieza de flujo de datos. Un ejemplo básico se puede encontrar aquí: http://www.cigital.com/newsletter/2009-11-tips.php. Si posee Fortify, debe haber una guía de escritura de reglas personalizada en la documentación de su producto.

No sé cuál será la bandera de corrupción que utilizará, pero se vería como "-LOG_FORGING". Básicamente, usted escribiría una regla para eliminar la "falsificación" del registro siempre que los datos se pasen a través de su método de utilidad. Fortify supondrá que los datos que se pasen allí ahora se pueden guardar en un registro y no provocarán la falsificación de registros.

+0

Gracias John! Siguiendo sus consejos y la documentación, pude escribir la regla personalizada que necesito. Tu artículo también fue muy útil. –

+2

este enlace ya no existe: http://www.cigital.com/newsletter/2009-11-tips.php – Coder17

2

Debe marcar su replaceNewLine como desinfectante en Fortify (si no recuerdo mal) y dejará de informar el problema.

+0

¿Tiene más detalles sobre estas opciones para marcar el método como 'desinfectante'? Estoy usando Fortify Audit Workbench y no puedo encontrar la opción. –

+0

Descubrí que hay algo llamado "Fortificar anotaciones Java", espero poder encontrar más información al respecto. –

+0

Lo siento, no he tocado esto por un tiempo. Hablar con el soporte de Fortify es su mejor opción: este es un producto costoso y el soporte estuvo bien la última vez que lo usé. –

8

Sé que esto ya fue respondida, pero me pareció un ejemplo sería bueno :)

<?xml version="1.0" encoding="UTF-8"?> 
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules"> 
    <RulePackID>D82118B1-BBAE-4047-9066-5FC821E16456</RulePackID> 
    <SKU>SKU-Validated-Log-Forging</SKU> 
    <Name><![CDATA[Validated-Log-Forging]]></Name> 
    <Version>1.0</Version> 
    <Description><![CDATA[Validated-Log-Forging]]></Description> 
    <Rules version="3.14"> 
    <RuleDefinitions> 
     <DataflowCleanseRule formatVersion="3.14" language="java"> 
     <RuleID>DDAB5D73-8CF6-45E0-888C-EEEFBEFF2CD5</RuleID> 
     <TaintFlags>+VALIDATED_LOG_FORGING</TaintFlags> 
     <FunctionIdentifier> 
      <NamespaceName> 
      <Pattern/> 
      </NamespaceName> 
      <ClassName> 
      <Pattern>Util</Pattern> 
      </ClassName> 
      <FunctionName> 
      <Pattern>replaceNewLine</Pattern> 
      </FunctionName> 
      <ApplyTo implements="true" overrides="true" extends="true"/> 
     </FunctionIdentifier> 
     <OutArguments>return</OutArguments> 
     </DataflowCleanseRule> 
    </RuleDefinitions> 
    </Rules> 
</RulePack> 
+0

¿dónde se agrega este código? – Coder17