
Inleiding – Het onbekende verkennen: onder het oppervlak van ongepatchte WordPress SSRF
In het steeds veranderende landschap van cybersecurity blijft WordPress een populair doelwit vanwege het wijdverbreide gebruik en uitgebreide plugin-ecosysteem. Hoewel de WordPress-kern over het algemeen veilig is, ontstaan er vaak kwetsbaarheden door plugins en thema's van derden. Een dergelijke kwetsbaarheid die de aandacht heeft getrokken, is de Server-Side Request Forgery (SSRF)-kwetsbaarheid. In deze blogpost duiken we in de complexiteit van de ongepatchte WordPress SSRF-kwetsbaarheid, de implicaties ervan en hoe WP-Firewall kan helpen uw WordPress-site te beschermen tegen dergelijke bedreigingen.
## De grondoorzaak: wp_http_validate_url()
In september 2022 publiceerde SonarSource een advies over een ongepatchte WordPress Core Unauthenticated Blind SSRF. De hoofdoorzaak van deze kwetsbaarheid ligt in de functie `wp_http_validate_url()`, die vatbaar is voor DNS-rebindingaanvallen. Hoewel de WordPress-kern zelf niet direct wordt beïnvloed, lopen plugins die gebruikmaken van deze kwetsbare functie wel risico.
Begrijpen van wp_http_validate_url()
De functie `wp_http_validate_url()` is ontworpen om URL's te valideren om redirection en request forgery-aanvallen te voorkomen. Het schiet echter tekort in de bescherming tegen DNS rebinding-aanvallen, waardoor het een potentiële vector is voor SSRF-kwetsbaarheden. Deze functie wordt vaak gebruikt in combinatie met `wp_remote_get()` en het veiligere alternatief, `wp_safe_remote_get()`.
Het voor de hand liggende deel: wp_remote_get() en wp_safe_remote_get()
De functie `wp_remote_get()` wordt vaak gebruikt om externe hosts via de server aan te vragen. Het is echter bekend dat het doorgeven van URL's van gebruikersinvoer aan deze functie kan leiden tot SSRF-kwetsbaarheden. Om dit risico te beperken, introduceerde WordPress `wp_safe_remote_get()`, dat extra validaties bevat om SSRF-aanvallen te voorkomen.
Hoe veilig is wp_safe_remote_get()?
De `wp_safe_remote_get()`-functie is ontworpen als een veiliger alternatief voor `wp_remote_get()`. Volgens de officiële WordPress-documentatie:
"Deze functie is ideaal wanneer de HTTP-aanvraag naar een willekeurige URL wordt gedaan. De URL wordt gevalideerd om omleiding en request forgery-aanvallen te voorkomen."
De veiligheid van de functie wordt echter beperkt door de onderliggende functie `wp_http_validate_url()`, die, zoals eerder vermeld, kwetsbaar is voor DNS-rebindingaanvallen.
Duiken in de functie
De broncode voor `wp_safe_remote_get()` is als volgt:
php
functie wp_safe_remote_get( $url, $args = array() ) {
$args['reject_unsafe_urls'] = waar;
$http = _wp_http_get_object();
retourneer $http->get( $url, $args );
}
Op regel 2 wordt de parameter `$args['reject_unsafe_urls']` ingesteld op `true`, wat uiteindelijk de gebruikersinvoer doorgeeft aan de functie `wp_http_validate_url()` voordat de URL wordt aangevraagd. Omdat `wp_http_validate_url()` kwetsbaar is voor DNS-rebindingaanvallen, is elke functie die uitsluitend op deze functie vertrouwt voor validatie ook kwetsbaar.
Beperkingen van de kwetsbaarheid
Hoewel dit geen volwaardige SSRF is, zijn er beperkingen opgelegd door de functie `wp_http_validate_url()`:
– Het protocol moet `http://` of `https://` zijn
– De poort kan alleen een van de volgende zijn: 80, 443 of 8080
Ondanks deze beperkingen is het via deze SSRF mogelijk om interne hosts binnen deze grenzen aan te vragen.
Kwetsbare plug-incode
Hier zijn enkele voorbeelden van kwetsbare plug-incode:
Niet-blinde SSRF
php
<?php
require_once('wp-load.php');
$url = $_GET['url'];
$response = wp_safe_remote_get( $url );
$response = wp_remote_retrieve_body( $response );
echo $-respons;
?>
Als de plugin gebruikersinvoer verwerkt, deze doorgeeft aan de functie `wp_safe_remote_get()` en vervolgens het antwoord weergeeft, is deze kwetsbaar voor niet-blinde beperkte SSRF.
Blinde SSRF
php
<?php
require_once('wp-load.php');
$url = $_GET['url'];
$response = wp_safe_remote_get( $url );
$response_code = wp_remote_retrieve_response_code( $response );
als ($response_code == 200) {
echo "Opstartbaar";
} anders {
echo "Down of niet gevonden!";
}
?>
Als de plugin gebruikersinvoer doorgeeft aan `wp_safe_remote_get()` maar alleen de responscode/status retourneert, is deze kwetsbaar voor blinde SSRF, waardoor de impact beperkt blijft tot poortscanning van poorten 80, 443 of 8080 van een interne host.
Aanvalsdemonstratie
Om deze kwetsbaarheid te demonstreren, hebben we een aanval uitgevoerd op een Apache-server die WordPress op poort 80 draaide en een PHP-server die op localhost:8080 draaide met wat geheime informatie. De kwetsbare code werd ingevoegd in de plugin-directory `/wp-content/plugins/vulnerable-plugin/index.php`.
GitHub-repository
U kunt een kwetsbaar Docker-exemplaar en het exploitscript vinden waarmee u met deze kwetsbaarheid kunt spelen in dit GitHub-repository. Credit: Ananda Dhakal
## Meer kwetsbare functies
Dezelfde kwetsbaarheid geldt voor andere functies die afhankelijk zijn van `wp_http_validate_url()` voor validatie:
– `wp_safe_remote_request()`
– `wp_safe_remote_post()`
– `wp_safe_remote_head()`
Bovendien fungeren sommige functies als wrappers voor `wp_safe_remote_get()` en zijn deze ook in zekere mate kwetsbaar:
– `WP_REST_URL_Details_Controller::get_remote_url()`
– `download_url()`
– `wp_remote_fopen()`
– `WP_oEmbed::discover()`
Conclusie
Het is duidelijk dat functies die als veilig worden beschouwd en die zijn ontworpen om te beschermen tegen SSRF-kwetsbaarheden, niet helemaal waterdicht zijn. De afhankelijkheid van `wp_http_validate_url()`, die kwetsbaar is voor DNS-rebindingaanvallen, stelt WordPress-sites bloot aan potentiële SSRF-aanvallen. We dringen er bij het WordPress Core-team op aan om dit probleem aan te pakken en een patch uit te brengen om de beveiliging van het platform te verbeteren.
Hoe WP-Firewall kan helpen
Bij WP-Firewall begrijpen we hoe belangrijk het is om uw WordPress-site te beveiligen tegen opkomende bedreigingen. Onze uitgebreide beveiligingsoplossingen zijn ontworpen om robuuste bescherming te bieden tegen een breed scala aan kwetsbaarheden, waaronder SSRF-aanvallen. Dit is hoe WP-Firewall u kan helpen uw WordPress-site te beschermen:
Realtime detectie van bedreigingen
WP-Firewall biedt realtime detectiemogelijkheden voor bedreigingen die uw site controleren op verdachte activiteiten en mogelijke kwetsbaarheden. Onze geavanceerde algoritmen kunnen SSRF-pogingen identificeren en blokkeren, zodat uw site veilig blijft.
Regelmatige beveiligingsaudits
Ons team van beveiligingsexperts voert regelmatig audits uit van uw WordPress-site en de bijbehorende plugins om kwetsbaarheden te identificeren en aan te pakken. Door potentiële bedreigingen voor te blijven, helpen we u een veilige omgeving voor uw gebruikers te behouden.
Geautomatiseerd patchbeheer
Het up-to-date houden van uw WordPress-kern, thema's en plugins is cruciaal voor de beveiliging. WP-Firewall biedt geautomatiseerd patchbeheer, zodat alle componenten van uw site worden bijgewerkt met de nieuwste beveiligingspatches.
Aangepaste firewallregels
Met WP-Firewall kunt u aangepaste firewallregels maken die zijn afgestemd op uw specifieke behoeften. Door regels te implementeren die kwaadaardige verzoeken en ongeautoriseerde toegangspogingen blokkeren, kunt u de beveiliging van uw site verbeteren.
Uitgebreide rapportage
Onze gedetailleerde beveiligingsrapporten bieden inzicht in de gedetecteerde bedreigingen en de acties die zijn ondernomen om uw site te beschermen. Met WP-Firewall blijft u te allen tijde op de hoogte van de beveiligingsstatus van uw WordPress-site.
Bescherming tegen SSRF met WP-Firewall
Om specifiek SSRF-kwetsbaarheden aan te pakken, biedt WP-Firewall de volgende functies:
Invoervalidatie
WP-Firewall voert strenge invoervalidatie uit om te garanderen dat door de gebruiker opgegeven URL's veilig zijn en vrij van kwaadaardige bedoelingen. Door invoer op meerdere niveaus te valideren, voorkomen we dat SSRF-aanvallen kwetsbare functies misbruiken.
DNS-rebindingbeveiliging
Onze firewall bevat DNS rebinding-beveiligingsmechanismen die pogingen om DNS rebinding-kwetsbaarheden te misbruiken detecteren en blokkeren. Dit zorgt ervoor dat uw site veilig blijft, zelfs als onderliggende functies zoals `wp_http_validate_url()` kwetsbaar zijn.
Veilige API-verzoeken
WP-Firewall beveiligt API-verzoeken door strikte validatie- en authenticatiemaatregelen af te dwingen. Dit voorkomt ongeautoriseerde toegang en beperkt het risico van SSRF-aanvallen op API-eindpunten.
Continue bewaking
Onze continue monitoringmogelijkheden houden het verkeer en de activiteiten van uw site nauwlettend in de gaten. Verdacht gedrag wordt gemarkeerd en snel aangepakt, waardoor het risico op succesvolle SSRF-aanvallen wordt geminimaliseerd.
Oproep tot actie
Hoewel de ongepatchte WordPress SSRF-kwetsbaarheid een aanzienlijk risico vormt, kunnen proactieve maatregelen de impact ervan beperken. Door gebruik te maken van de uitgebreide beveiligingsoplossingen van WP-Firewall, kunt u uw WordPress-site beschermen tegen SSRF-aanvallen en andere opkomende bedreigingen. Blijf potentiële kwetsbaarheden voor en zorg voor een veilige omgeving voor uw gebruikers met WP-Firewall.
Wacht niet op een beveiligingslek om actie te ondernemen. Beveilig uw WordPress-site vandaag nog met WP-Firewall. Start uw gratis proefperiode en ervaar de gemoedsrust die robuuste, realtime bescherming met zich meebrengt.
Voor meer informatie over hoe WP-Firewall u kan helpen uw WordPress-site te beveiligen, bezoek onze website of neem contact op met ons supportteam.
Blijf veilig en bescherm uw WordPress-site met WP-Firewall.
—
Wekelijks beveiligingsadvies
Ontvang de nieuwste WordPress-beveiligingsinformatie in uw inbox. Abonneer u op onze nieuwsbrief en blijf op de hoogte van de nieuwste bedreigingen en best practices voor het beveiligen van uw WordPress-site.
Het laatste nieuws over beveiligingsadviezen
Bekijk de nieuwste beveiligingsadviezen en blijf op de hoogte van kritieke kwetsbaarheden die van invloed zijn op WordPress-plug-ins en -thema's.
– 19 mei 2024: WordPress kwetsbaarheidsrapport (6 mei 2024 tot 12 mei 2024)
– 15 mei 2024: Kwetsbaarheden met hoge prioriteit gepatcht in Uncode Core Plugin