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

OWASP Zed Attack Proxy (ZAP) beveiligingstests

Wanneer u een ontwikkelaar van websites bent, kunt u op eenvoudige wijze kwetsbaarheden krijgen met behulp van de applicatie OWASP Zed Attack Proxy (ZAP).

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

Tijd voor vreugde of crisis: het draaien van de OWASP Zed Attack Proxy (ZAP) applicatie om kwetsbaarheden van onze webapplicatie te controleren. Ontwikkelaars weten vaak dat er zwakke punten in hun code zitten, maar er is altijd een datum van levering. Dus waarom zou je niet een tool gebruiken die de bekende en belangrijke zaken op een rijtje zet? Dit is de eerste keer dat ik ZAP gebruik, dus als je een expert bent kun je beter stoppen met lezen. In de onderstaande links vindt u informatie over de installatie en het gebruik, ook als u bent ingelogd. Op mijn Ubuntu 18.04 systeem installatie was een makkie, gewoon downloaden, in de terminal ga naar de download directory en typ:

./zap.sh

Ik heb dit niet tegen mijn productiesite aangestuurd, maar op dezelfde machine waar de ontwikkelingsversie van mijn website draait. Om te starten wanneer u bent ingelogd, gaat u naar 'Manual Explore', typt u de URL van de lokale website en klikt u vervolgens op de knop 'Launch Browser'. Hiermee wordt een nieuw browservenster gestart met uw website met ZAP-knoppen aan de linker- en rechterzijde. Login zoals gewoonlijk en klik op (Spider) Start een run. De inlogknop van mijn website zat een beetje onder de knoppen aan de linkerkant, ik moest de breedte van het scherm veranderen om de knop te herpositioneren en te openen.

Waarschuwingen gerapporteerd door ZAP

Hieronder staan enkele waarschuwingen die ZAP heeft gemeld. Alle teksten in de onderstaande blokken zijn afkomstig uit de ZAP-applicatie. Ik laat slechts een paar regels zien, maar in veel gevallen is er veel meer informatie. "Na onderzoek" betekent meestal dat ik:

  • Klik op het tabblad Waarschuwingen
  • Selecteer een regel met het probleem
  • Klik op het tabblad Aanvraag en bekijk de aanvraag
  • Klik op het tabblad Reactie en kijk naar de reactie

Path Traversal

Gerapporteerd door ZAP:

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.
...

Na onderzoek:

Hoewel dit veel meer onderzoek vergt, bleek dat de themaselector-processor niet controleerde of het gevraagde thema in de beschikbare thema's zat. Vast. Ook na het bekijken van de respons viel het me op dat ik een zin had in een blogpost met daarin het woord 'etc'. Dit werd benadrukt in het antwoord. Dit gaat over aanvallen op /etc of c:\etc. Geen probleem.

Absence of Anti-CSRF Tokens

Gerapporteerd door ZAP:

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. 
...

Na onderzoek:

De zoekformulieren maakten ten onrechte gebruik van de POST-methode. Ik heb de methode veranderd in GET en natuurlijk accepteert de zogenaamde Flask methode alleen de GET methode.

Private IP Disclosure

Gerapporteerd door ZAP:

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.
...

Na onderzoek:

Het bericht kwam uit de tekst van een blogpost waarin ik dit IP-adres vermeldde. Geen probleem.

Format String Error

Gerapporteerd door ZAP:

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. 
...

Na onderzoek:

In het antwoord werd een 500-keerfout in de tekst weergegeven: sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, &quot;Gegevens te lang voor kolom 'request_url' op rij 1&quot;) In dit geval was het PageRequest SQLAlchemy object waar ik elke inkomende aanvraag opslaat. Ik hoopte en verwachtte dat te lange waarden automatisch zouden worden afgekapt, maar dit was een verkeerde veronderstelling! Misschien kan dit ook elders in het programma gebeuren. Ik heb dit voor dit object in ieder geval veranderd door de lengte van de kolom te krijgen en de waarde af te kappen alvorens het in te voegen.

Buffer Overflow

Gerapporteerd door ZAP:

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.  
...

Na onderzoek:

Ook hier toonde het antwoord een 500-tal fouten met de tekst: sqlalchemy.exc.DataError: (pymysql.err.DataError) (1406, &quot;Gegevens te lang voor kolom 'request_url' op rij 1&quot;) En weer was het het PageRequest SQLAlchemy object waar ik elk binnenkomend verzoek opslaat. Dezelfde oplossing.

Application Error Disclosure

Gerapporteerd door ZAP:

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.
...

Na onderzoek:

De url is door ZAP ontdekt vanwege Content-Security-Policy-Report-Only header die het (csp) report-uri bevat. De /run url maakt geen deel uit van de zichtbare toepassing. Ik heb net de applicatie foutafhandeling gebruikt die Babel voor vertalingen oproept. Dit is gewijzigd door het toevoegen van één taalbasisfoutpagina's voor de applicatie op de /run url.

X-Content-Type-Options Header Missing

Gerapporteerd door ZAP:

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. 
...

Na onderzoek:

Een niet bestaand beeld werd teruggegeven. Ik heb security headers, uiteraard met uitzondering van de CSP-header, aan het antwoord toegevoegd. Ook heb ik basis HTTP-foutpagina's toegevoegd. De browser toont een niet-bestaand beeld. Prima.

Application Error Disclosure

Gerapporteerd door ZAP:

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.
...

Na onderzoek:

Dit gebeurt alleen in de (lokale) Flask ontwikkelmodus. In de productie worden alle statische items bediend door Nginx. Geen probleem... Ik denk.

Samenvatting

Een tool als de OWASP Zed Attack Proxy (ZAP) laat zelfs een noob zoals ik kwetsbaarheden op een eenvoudige manier vinden. Ik kan deze tool aan alle ontwikkelaars aanbevelen. En omdat het probeert uw site aan te vallen op alle beschikbare url's is het ook uiterst nuttig om andere problemen zoals ontbrekende pagina's en CSP-schendingen te vinden.

Links / credits

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

Laat een reactie achter

Reageer anoniem of log in om commentaar te geven.

Opmerkingen

Laat een antwoord achter

Antwoord anoniem of log in om te antwoorden.