2014-01-21 12 views
5

Fority Scan berichtet "Path Manipulation" Fragen der Sicherheit im Code-Schnipsel folgendenFortify Pfad Manipulation Fehler

String filePath = getFilePath(fileLocation, fileName); 
final File file = new File(filePath); 
LOGGER.info("Saving report at : " + filePath); 
BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file)); 
fileWriter.write(fileContent); 

so bin Überprüfung i für die schwarze Liste gesetzten Zeichen in filelocation und Ausnahme zu werfen, noch die Fortify die Ausnahme wirft.

sollte ich den Scanbericht ignorieren oder was wäre die richtige Lösung dafür?

+0

Schauen Sie dies auch https://security.stackexchange.com/questions/103884/how-to-resolve-path-manipulation-error-given-by-fortify –

Antwort

1

Erstens ist SCA ein statisches Analysewerkzeug und kann Ihre benutzerdefinierte Validierung nicht überprüfen, um festzustellen, ob es korrekt funktioniert oder nicht, da dies ein dynamisches Werkzeug wie WebInspect ist.

Zweitens, Blacklisting ist eine schlechte Möglichkeit, etwas zu sichern, Whitelisting ist die weitaus sicherere Methode und die Tatsache, dass Sie Blacklisting Validation auf Stdout erwähnen würde locken einen Angreifer. Dies liegt daran, dass Sie jeden einzelnen möglichen Angriffsweg berücksichtigen müssen, einschließlich Möglichkeiten, die möglicherweise noch nicht entdeckt wurden, so dass sie leicht veralten könnten, bevor die Software überhaupt veröffentlicht wird.

Drittens würde dies auf jeden Fall nicht ausreicht, um gegen Anhalteweg Manipulation, da Sie nur für Menschen, Buchhaltung suchen relative Pfade und insbesondere relative Pfade über das aktuelle Verzeichnis.

Es gibt keine Möglichkeit zu erkennen, ob jemand einen vollständigen Pfad angibt oder ob jemand in ein Verzeichnis geht, das eine symbolische Verbindung zu einem separaten Verzeichnis darstellt, zusammen mit ein paar anderen möglichen alternativen Angriffen.

Im Idealfall sollten Sie den Empfehlungen von SCA folgen und haben eine sehr spezifische zulässige Pfade & Dateinamen. Wenn dies nicht möglich ist, verwenden Sie eine Whitelisting-Technik, um die einzigen erlaubten Zeichen anzugeben, und validieren Sie dann, um anzugeben, dass es sich nicht beispielsweise um eine SMB-Freigabe oder einen vollständigen Pfad handelt. Wenn es nicht gemäß der Spezifikation validiert, was Benutzer angeben sollten, lehnen Sie es ab.

Dies wird das Problem selbst loswerden, aber SCA wird wahrscheinlich immer noch das Problem in den Ergebnissen zeigen (wieder aufgrund der Unterschiede zwischen statischen vs dynamischen Analyse). Dies kann umgangen werden, indem Sie es als solches auditieren oder eine benutzerdefinierte Bereinigungsregel für die Funktion erstellen, die das Problem validiert.