angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

OWASP Zed Attack Proxy (ZAP) Sicherheitsprüfung

Wenn Sie ein Entwickler von Websites sind, können Sie Schwachstellen auf einfache Weise mit der Anwendung OWASP Zed Attack Proxy (ZAP) ausfindig machen.

13 Januar 2020
post main image
https://unsplash.com/@ostshem

Zeit für Freude oder Krise: die Anwendung OWASP Zed Attack Proxy (ZAP) ausführen, um die Schwachstellen unserer Webanwendung zu überprüfen. Entwickler wissen oft, dass es Schwachstellen in ihrem Code gibt, aber es gibt immer ein Lieferdatum. Warum also nicht ein Tool verwenden, das die bekannten und wichtigen auflistet? Dies ist mein erstes Mal, dass ich ZAP benutze, wenn Sie also ein Experte sind, hören Sie am besten auf, hier zu lesen. In den untenstehenden Links finden Sie Informationen zur Installation und Ausführung, auch wenn Sie angemeldet sind. Auf meinem Ubuntu 18.04 System war die Installation ein Kinderspiel, einfach downloaden, im Terminal in das Download-Verzeichnis gehen und eintippen:

./zap.sh

Ich habe dies nicht gegen meine Produktionsstätte laufen lassen, sondern auf der gleichen Maschine, auf der auch die Entwicklungsversion meiner Website läuft. Zum Ausführen, wenn Sie angemeldet sind, gehen Sie zu 'Manuelle Suche', geben Sie die URL der lokalen Website ein und klicken Sie dann auf die Schaltfläche 'Browser starten'. Dies startet ein neues Browserfenster mit Ihrer Website mit ZAP-Buttons auf der linken und rechten Seite. Melden Sie sich wie gewohnt an und klicken Sie auf (Spider) Start, um einen Lauf zu starten. Der Login-Button meiner Website war ein wenig unter den linken Seitenbuttons, ich musste die Breite des Bildschirms ändern, um den Button neu zu positionieren und zu erreichen.

Von der ZAP gemeldete Warnungen

Unten sind einige Warnungen, die ZAP gemeldet hat. Alle Texte in den folgenden Blöcken stammen aus der ZAP-Anwendung. Ich zeige nur einige wenige Zeilen, aber in vielen Fällen gibt es viel mehr Informationen. "Nach der Untersuchung" bedeutet, dass ich die meiste Zeit

  • Klicken Sie auf die Registerkarte Alerts
  • Wählen Sie eine Zeile mit dem Problem
  • Klicken Sie auf die Registerkarte Anfrage und schauen Sie sich die Anfrage an
  • Klicken Sie auf die Registerkarte Antwort und sehen Sie sich die Antwort an

Path Traversal

Von ZAP berichtet:

Alert priority: High
Path Traversal
Evidence: etc
Description: 
The  Path Traversal  attack technique allows an attacker access to files, directories, and commands that potentially reside outside the web document root directory. 
An attacker may manipulate a URL in such a way that the web site will execute or reveal the contents of arbitrary files anywhere on the web server. 
Any device that exposes an HTTP-based interface is potentially vulnerable to  Path Traversal.
...

Nach der Untersuchung:

Obwohl dies weitaus mehr Untersuchung benötigt, schien es, dass der Themenselektor-Prozessor nicht überprüft hat, ob das angeforderte Thema in den verfügbaren Themen enthalten ist. Repariert. Auch nachdem ich mir die Antworten genauer angesehen habe, fiel mir auf, dass ich in einem Blog-Post einen Satz mit dem Wort 'etc' hatte. Dies wurde in der Antwort hervorgehoben. Hier geht es um Angriffe auf /etc von c:\etc. Kein Problem.

Absence of Anti-CSRF Tokens

Von ZAP berichtet:

Alert priority: Low
Absence of Anti-CSRF Tokens
Evidence: <form name="search" action="/en/blog/posts/search" method="post">
Description: No Anti-CSRF tokens were found in a  HTML  submission form.
A cross-site request forgery is an attack that involves forcing a victim to send an HTTP request to a target destination without their knowledge or intent in order to perform an action as the victim. 
The underlying cause is application functionality using predictable URL/form actions in a repeatable way. 
The nature of the attack is that CSRF exploits the trust that a web site has for a user. 
...

Nach der Untersuchung:

Die Suchformulare verwendeten fälschlicherweise die POST-Methode. Ich habe die Methode auf GET geändert und natürlich akzeptiert die aufgerufene Flask -Methode nur die GET-Methode.

Private IP Disclosure

Von ZAP berichtet:

Alert priority: Low
Private IP Disclosure
Evidence: 192.168.0.0
Description: A private IP (such as 10.x.x.x, 172.x.x.x, 192.168.x.x) or an Amazon EC2 private hostname (for example, ip-10-0-56-78) 
has been found in the HTTP response body. This information might be helpful for further attacks targeting internal systems.
...

Nach der Untersuchung:

Die Nachricht stammt aus dem Text eines Blog-Posts, in dem ich diese IP-Adresse erwähnt habe. Kein Problem.

Format String Error

Von ZAP berichtet:

Alert priority: Medium
Format String Error
Parameter: lc
Attack: ZAP %1!s%2!s%3!s%4!s%5!s%6!s%7!s%8!s%9!s%10!s%11!s%12!s%13!s%14!s%15!s%16!s%17!s%18!s%19!s%20!s%21!n%22!n%23!n%24!n%25!n%26!n%27!n%28!n%29!n%30!n%31!n%32!n%33!n%34!n%35!n%36!n%37!n%38!n%39!n%40!n
Description: A Format String error occurs when the submitted data of an input string is evaluated as a command by the application. 
...

Nach der Untersuchung:

Die Antwort zeigte einen 500 Fehler mit dem Text: sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, &quot;Daten zu lang für die Spalte 'request_url' bei Zeile 1&quot;) In diesem Fall war es das PageRequest SQLAlchemy Objekt, in dem ich jede eingehende Anfrage speichere. Ich habe gehofft, erwartet, dass zu lange Werte automatisch abgeschnitten werden, aber das war eine falsche Annahme! Vielleicht kann dies auch an anderer Stelle im Programm geschehen. Ich habe dies für dieses Objekt ohnehin geändert, indem ich die Länge der Spalte ermittelt und den Wert vor dem Einfügen abgeschnitten habe.

Buffer Overflow

Von ZAP berichtet:

Alert priority: Medium
Buffer Overflow
Parameter: lc
Attack: GET http://127.0.0.1:8000/en/auth/register?lc=aofyVsiquNyUZJJWRvcyMtmOKToYwtFlLIjVPAnQbvLMSuvapNZbePEuuZUgyEVHmcDklTcXYhZDCGFNtEFpbiJaafhHTrJobQWgcGKHjrYuDDaYbddfJxoemFoxRtesJrGieOviBIdFHhoYngoGNKaowenBuwavrUdOAfKElNWLoGHVTTsQDUTRgZMYKUTAOQJuNqQqBNkjuuMgAxqCQKvEvSvHviRyXrFRylXFjQuDeRosheUMCjjEFZRLMFpmRcYsjYZKPaALNOBvjLMcYJtoUIxGCKqYBSPwRTilwkaxxPmCekriFLVOkVtpVlSMWvtgHdrnjuAEesIuwfWyByZQjJKblYBXbRBHoHjCJKssKKdynuuGTnGlCMrRQHUnTcgbOPhCoTgIAcyDxBerlYELKJlCiIEbAnkFbtgCqnBKaUsHglhcVcyjqFnXtUEAKoHDSXMHhTJmXFvmYBxvEFITqJQgaWOsHIutVZYDiuRBSMwOXQYlmTenZHXPnchCHTfxtvsqlgZQZYmyNKYXRETmBRKyHKTbgoJGtVFaMCOPkvQAGasEylqdVEutnJiHSIBhovlKfMbPpctsMTsukniTThWTFqLJLS
Description: Buffer overflow errors are characterized by the overwriting of memory spaces of the background web process, which should have never been modified intentionally or unintentionally. Overwriting values of the IP (Instruction Pointer), BP (Base Pointer) and other registers causes exceptions, segmentation faults, and other process errors to occur. Usually these errors end execution of the application in an unexpected way.  
...

Nach der Untersuchung:

Wieder zeigte die Antwort einen 500 Fehler mit dem Text: sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, &quot;Daten zu lang für die Spalte 'request_url' in Zeile 1&quot;) Und wieder war es das PageRequest SQLAlchemy Objekt, in dem ich jede eingehende Anfrage speichere. Die gleiche Lösung.

Application Error Disclosure

Von ZAP berichtet:

Alert priority: Low
Application Error Disclosure
Url: http://127.0.0.1:8000/run
Evidence: HTTP/1.0 500 INTERNAL SERVER ERROR (KeyError: 'babel' // Werkzeug Debugger)
Description: 
This page contains an error/warning message that may disclose sensitive information like the location of the file that produced the unhandled exception. This information can be used to launch further attacks against the web application. The alert could be a false positive if the error message is found inside a documentation page.
...

Nach der Untersuchung:

Die Url wurde von ZAP aufgrund des Content-Security-Policy-Report-Only-Headers entdeckt, der den (csp)-Report-uri enthält. Die /run url ist nicht Teil der sichtbaren Anwendung. Ich habe gerade die Applikationsfehler-Handler verwendet, die Babel für Übersetzungen aufrufen. Dies wurde geändert, indem einsprachige Basisfehlerseiten für die Anwendung auf der /run url hinzugefügt wurden.

X-Content-Type-Options Header Missing

Von ZAP berichtet:

Alert priority: Low
X-Content-Type-Options Header Missing
Url: http://127.0.0.1:8000/run/raw?__debugger__=yes&cmd=resource&f=console.png
Parameter: X-Content-Type-Options
Description: 
The Anti-MIME-Sniffing header X-Content-Type-Options was not set to 'nosniff'. This allows older versions of Internet Explorer and Chrome to perform MIME-sniffing on the response body, potentially causing the response body to be interpreted and displayed as a content type other than the declared content type. 
...

Nach der Untersuchung:

Ein nicht existierendes Bild wurde zurückgegeben. Ich habe security headers, natürlich ohne den CSP-Header, zur Antwort hinzugefügt. Außerdem habe ich grundlegende HTTP-Fehlerseiten hinzugefügt. Der Browser zeigt ein nicht existierendes Bild an. Gut.

Application Error Disclosure

Von ZAP berichtet:

Alert priority: Low
Application Error Disclosure
Url: http://127.0.0.1:8000/admin/static/
Evidence: HTTP/1.0 500 INTERNAL SERVER ERROR
Description: 
This page contains an error/warning message that may disclose sensitive information like the location of the file that produced the unhandled exception. This information can be used to launch further attacks against the web application. The alert could be a false positive if the error message is found inside a documentation page.
...

Nach der Untersuchung:

Dies geschieht nur im (lokalen) Flask Entwicklungsmodus. In der Produktion werden alle statischen Elemente von Nginx bedient. Kein Problem ... Ich glaube.

Zusammenfassung

Ein Tool wie das OWASP Zed Attack Proxy (ZAP) lässt selbst einen Neuling wie mich auf einfache Weise Schwachstellen finden. Ich kann dieses Tool allen Entwicklern empfehlen. Und weil es versucht, Ihre Website auf alle verfügbaren URLs anzugreifen, ist es auch extrem nützlich, um andere Probleme wie fehlende Seiten und CSP-Verletzungen zu finden.

Links / Impressum

Getting Started with ZAP and the OWASP Top 10: Common Questions
https://www.denimgroup.com/resources/blog/2019/09/getting-started-questions/

How can ZAP automatically authenticate via forms?
https://github.com/zaproxy/zaproxy/wiki/FAQformauth

OWASP ZAP for Dummies
https://devonblog.com/security/owasp-zap-for-dummies/

proxy settings for localhost not obeyed unless network.proxy.allow_hijacking_localhost is set
https://bugzilla.mozilla.org/show_bug.cgi?id=1535581

Running Penetration Tests for your Website as a Simple Developer with OWASP ZAP
https://medium.com/volosoft/running-penetration-tests-for-your-website-as-a-simple-developer-with-owasp-zap-493d6a7e182b

The Open Web Application Security Project (OWASP)
https://www.owasp.org

The OWASP Zed Attack Proxy (ZAP)
https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

Mehr erfahren

Security testing

Einen Kommentar hinterlassen

Kommentieren Sie anonym oder melden Sie sich zum Kommentieren an.

Kommentare

Eine Antwort hinterlassen

Antworten Sie anonym oder melden Sie sich an, um zu antworten.