Taggat med: PHPMailer

Allvarlig säkerhetsbrist i PHPMailer

Dawid Golunski från Legal Hackers har upptäckt en ny allvarlig säkerhetsbrist i det populära biblioteket PHPMailer som används av miljontals mjukvaror såsom WordPress, Drupal, 1CRM, SugarCRM, Yii och Joomla.

Samtliga versioner innan 5.2.18 är sårbara för denna RCE (remote code execution). I dagsläget har Dawid ej släppt några detaljer om denna brist men troligtvis så rör det sig bara om timmar innan sårbarheten börjar att utnyttjas på internet.

En förmildrande faktor är att du måste ha ett kontaktformulär som använder sig av biblioteket. Samt så får angriparen samma behörigheter som användaren som webbservern körs som.

Denna sårbarhet har fått CVE-2016-10033, läs mer här.

Uppdatering: Tittar jag närmare på den commit som åtgärdar säkerhetsproblemet så ser den ut så här:

if (!empty($this->Sender) and $this->validateAddress($this->Sender)) {
    $params = sprintf('-f%s', escapeshellarg($this->Sender));
}

Dvs escapeshellarg()-funktionen läggs till. Troligtvis för att avsändaremail -f skickas med  ut till sendmail i commandline och gör det då möjligt att köra kommandon.

Uppdatering 2: Nu har Legal Hackers släppt en proof-of-concept exploit samt förklaring till sårbarheten. Och det är precis som vi anade ovan att extra data kan skickas vidare, dock inte helt enkelt som förklarat ovan:

Genom att skicka följande som avsändarepost:

”Attacker \” -Param2 -Param3″@test.com

Och detta skickas vidare till  PHPMailer (och även mail()) så exekveras sendmail lokalt med följande argument:

Arg no. 0 == [/usr/sbin/sendmail]
Arg no. 1 == [-t]
Arg no. 2 == [-i]
Arg no. 3 == [-fAttacker\]
Arg no. 4 == [-Param2]
Arg no. 5 == [-Param3"@test.com]

Exempelvis kan följande argument skickas med ovan för att skriva ut bodyn i ett meddelande till en fil som ligger i webbrooten:

-X/var/www/phpcode.php