Taggat med: php

Ett flertal sårbarheter åtgärdade i PHP

En stor mängd säkerhetsbrister har åtgärdats i det populära webbramverket PHP. Sårbarheterna som uppdagats kan leda till att en angripare kan exekvera kod, genomföra blockeringsattacker (DoS) eller installera program(?). Oklart om dessa går att utnyttja fjärrmässigt, över internet exempelvis eller om det enbart är lokala sårbarheter.

Följande versioner är sårbara:

  • PHP 7.2 före version 7.2.1
  • PHP 7.1 före version 7.1.13
  • PHP 7.0 före version 7.0.27
  • PHP 5.0 före version 5.6.33

Följande sårbarheter är åtgärdade:

Version 7.2.1
Bug #64938 (libxml_disable_entity_loader setting is shared between requests).
Bug #73124 (php_ini_scanned_files() not reporting correctly).
Bug #73830 (Directory does not exist).
Bug #74183 (preg_last_error not returning error code after error).
Bug #74782 (remove file name from output to avoid XSS).
Bug #74862 (Unable to clone instance when private clone defined).
Bug #75074 (php-process crash when is_file() is used with strings longer 260 chars).
Bug #75384 (PHP seems incompatible with OneDrive files on demand).
Bug #75409 (accept EFAULT in addition to ENOSYS as indicator that getrandom() is missing).
Bug #75511 (fread not free unused buffer).
Bug #75514 (mt_rand returns value outside [$min,$max]+ on 32-bit) (Remi)
Bug #75525 (Access Violation in vcruntime140.dll).
Bug #75535 (Inappropriately parsing HTTP response leads to PHP segment fault).
Bug #75540 (Segfault with libzip 1.3.1).
Bug #75556 (Invalid opcode 138/1/1).
Bug #75570 (”Narrowing occurred during type inference” error).
Bug #75571 (Potential infinite loop in gdImageCreateFromGifCtx).
Bug #75573 (Segmentation fault in 7.1.12 and 7.0.26).
Bug #75574 (putenv does not work properly if parameter contains non-ASCII unicode character).
Bug #75579 (Interned strings buffer overflow may cause crash).
Bug #75608 (”Narrowing occurred during type inference” error).

Version 7.1.13
Bug #60471 (Random ”Invalid request (unexpected EOF)” using a router script).
Bug #64938 (libxml_disable_entity_loader setting is shared between requests).
Bug #73124 (php_ini_scanned_files() not reporting correctly).
Bug #73830 (Directory does not exist).
Bug #74183 (preg_last_error not returning error code after error).
Bug #74782 (remove file name from output to avoid XSS).
Bug #74862 (Unable to clone instance when private clone defined).
Bug #75074 (php-process crash when is_file() is used with strings longer 260 chars).
Bug #75384 (PHP seems incompatible with OneDrive files on demand).
Bug #75409 (accept EFAULT in addition to ENOSYS as indicator that getrandom() is missing).
Bug #75511 (fread not free unused buffer).
Bug #75514 (mt_rand returns value outside [$min,$max]+ on 32-bit) (Remi)
Bug #75535 (Inappropriately parsing HTTP response leads to PHP segment fault).
Bug #75540 (Segfault with libzip 1.3.1).
Bug #75570 (”Narrowing occurred during type inference” error).
Bug #75571 (Potential infinite loop in gdImageCreateFromGifCtx).
Bug #75573 (Segmentation fault in 7.1.12 and 7.0.26).
Bug #75574 (putenv does not work properly if parameter contains non-ASCII unicode character).
Bug #75579 (Interned strings buffer overflow may cause crash).
Bug #75608 (”Narrowing occurred during type inference” error).

Version 7.0.27
Bug #60471 (Random ”Invalid request (unexpected EOF)” using a router script).
Bug #64938 (libxml_disable_entity_loader setting is shared between requests).
Bug #74183 (preg_last_error not returning error code after error).
Bug #74782 (Reflected XSS in .phar 404 page).
Bug #75384 (PHP seems incompatible with OneDrive files on demand).
Bug #75409 (accept EFAULT in addition to ENOSYS as indicator that getrandom() is missing).
Bug #75535 (Inappropriately parsing HTTP response leads to PHP segment fault).
Bug #75540 (Segfault with libzip 1.3.1).
Bug #75571 (Potential infinite loop in gdImageCreateFromGifCtx).
Bug #75573 (Segmentation fault in 7.1.12 and 7.0.26).
Bug #75579 (Interned strings buffer overflow may cause crash).

Version 5.6.33
Bug #74782 (Reflected XSS in .phar 404 page).
Bug #75571 (Potential infinite loop in gdImageCreateFromGifCtx).

Källa: US-CERT

httpoxy – Ny omfattande sårbarhet mot webbapplikationer

httpoxy attack

httpoxy är namnet på en nygammal säkerhetsbrist kan återfinnas i otroligt många ramverk för webbapplikationer. Denna nya bugg gör det möjligt för en angripare att styra om utgående trafik från en webbapplikation.

Buggen kan beskrivas lättast genom följande förfarande:

  1. Angriparen gör ett anrop mot en sårbar applikation och skickar med Proxy-http headern
  2. Applikationen gör en utgående förfrågan efter data och använder sedan uppgifter från angriparens Proxy-http header som proxy
  3. Angriparen kan sedan sätta sig i mitten och genomföra MITM-attack

Nedan listas några programspråk och dess uppsättning som kan vara sårbar för denna attack.

Programspråk Ramverk HTTP-klient
PHP php-fpm
mod_php
Guzzle 4+
Artax
Python wsgiref.handlers.CGIHandler
twisted.web.twcgi.CGIScript
requests
Go net/http/cgi net/http

Åtgärder

För att förhindra denna attack måste först och främst din applikation använda sig av ovan programspråk, ramverk och http-klient. Även så måste din webbapplikation göra utgående http-förfrågningar när en besökare gör sitt anrop.

För att ta bort HTTP_PROXY miljövariabeln som är boven i dramat så kan du som använder Nginx lägga till följande:

fastcgi_param HTTP_PROXY "";

Använder du Apache som webbserver bör du först och främst läsa denna advisory och sedan kan du använda följande direktiv för att ta bort Proxy http-headern:

RequestHeader unset Proxy

Och använder du Microsoft IIS tillsammans med PHP så bör du lägga in följande i din apphost.config:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">
                <match url="*.*" />
                <serverVariables>
                    <set name="HTTP_PROXY" value="" />
                </serverVariables>
                <action type="None" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

Buggen har återkommit under flertalet år i olika ramverk och tyvärr så har den aldrig riktigt åtgärdats.

Säkerhetsbuggen har fått följande CVE-er:

  • CVE-2016-5385: PHP
  • CVE-2016-5386: Go
  • CVE-2016-5387: Apache HTTP Server
  • CVE-2016-5388: Apache Tomcat
  • CVE-2016-1000109: HHVM
  • CVE-2016-1000110: Python

Här hittar du mer information: httpoxy.org

Dåliga slumptal i PHP

PHP är ett av de programmeringsspråk som är populärast när det gäller utveckling mot webben. En funktion som gör det möjligt för webbapplikationen att hålla koll på om en användare är inloggad eller ej använder sig av så kallade Cookies. Det har nu visats sig att dessa Cookies går att beräkna eftersom de enbart är under 20-bitar istället för 64 som de bör.

Felaktigheten ligger i LCG (linear congruential generator) som är den pseudo-slumpgenerator som PHP 5.3.1 och tidigare använder sig av.

Samy Kamkar har hittat denna bugg och beskriver detta utförligare på nedan länk. Samy är även den person som skrev den första AJAX-masken som använde sig av MySpace.

http://samy.pl/phpwn/

Kryptering med PHP

PHP är ett mycket väl använt programmeringsspråk som används i samband med webb-programmering. Krypteringsfunktionerna i PHP kan delas upp i följande kategorier:

  • mcrypt
  • openssl
  • inbyggda

Här följer en mycket liten sammanställning av dessa tre kategorier:

mcrypt

Mcrypt som är ett tredjepartsbibliotek innefattar en mängd kryptering/dekrypterings-funktioner såsom:

Vill du exempelvis skapa en SHA256 hexsträng på godtycklig sträng kan du göra enligt följande:

$sha256b= base64_encode(bin2hex(mhash(MHASH_SHA256,$phrase)));

openssl

OpenSSL är också ett tredjepartsbibliotek och innefattar bl.a dessa funktioner:

De funktioner OpenSSL tillhandahåller i PHP är mer inriktade på assymetrisk kryptering.

inbyggda funktioner

Den mest använda krypteringsfunktionen i PHP är crypt() som stödjer följande krypteringsalgoritmer:

  • CRYPT_STD_DES – Standard DES-based encryption with a two character salt
  • CRYPT_EXT_DES – Extended DES-based encryption with a nine character salt
  • CRYPT_MD5 – MD5 encryption with a twelve character salt starting with $1$
  • CRYPT_BLOWFISH – Blowfish encryption with a sixteen character salt starting with $2$ or $2a$

Övriga kryptorelaterade funktioner som återfinns som standard i PHP är exempelvis sha1 och md5.