S dotazi nás neváhejte kontaktovat: (420) 777 849 161 - Email info@vyroba-webu.cz

Pico (CMS)

Dnes si zkusíme otestovat nějaký menší projekt v PHP. Konkrétně jednu z populárních PHP knihoven, Pico (CMS). Abychom nemuseli mít dilema zda zakládat tikety pro vývojáře dané aplikace a jednalo se pouze o ukázku, otestujeme nějakou starší verzi. Vybral jsem verzi 2.0.0. Každý si jako vždy můžete tento kód zkusit otestovat vaším nástroje, tato verze je k dispozici zde:

https://github.com/picocms/Pico/archive/v2.0.0.zip

Prohnal jsem aplikaci SAST nástrojem (jako vždy neuvádím kterým, nechávám na fantazii čtenářů). Níže je přehled nálezů z krátkým popisem jak by mělo/mohlo vypadat vyhodnocení takových nálezů:

Reflected XSS

V souboru Pico.php

Popis chyby:

Metoda getBaseUrl ziskava data  z HTTP_POST. Tato data nasledne prochazi kodem a jsou eventuálně zobrazena uživateli.

Doporučení:

  1. Validovat a sanitizovat veškeré vstupy bez ohledu na zdroj. Validace by měla být založena na white-listingu, akceptovat pouze známé cookies s daným datovým typem. Je třeba kontrolovat: typ, velikost, rozsah, formát, očekávané hodnoty.
    2. Veškerá dynamická data příslušně zaenkódovat, pokud jsou součástí výstupu. Encoding by měl být citlivý na kontext, např. HTML encoding pro HTML data, encoding HTML atributů pro výstup do hodnot atributů a nebo JavaScript pro serverem generovaný kód.
    3. Zvažte užití knihovny ESAPI nebo vestavěné funkce platformy.
    4. V HTTP hlavičce Content-Type explicitně definujte kódovaní znaků pro celou stránku.
    5. V session cookie nastavte příznak httpOnly, abyste zamezili zneužití ukradené cookie.

 

Stored code Injection

V souboru Pico.php

Popis chyby:

Aplikace v metodě handleEVent přijímá a dynamicky spouští kód ovlivnitelný uživatelem použitím call_user_func_array.

Doporučení:

Aplikace, která spouští kód třetí strany (pluginy), by měla být spuštěna pod uživatelem s minimálním oprávněním. Pokud je to možné, izolovat veškeré dynamické spouštění do separátního dedikovaného uživatelského účtu, který má oprávnění pouze pro specifické operace a soubory použité pro dynamické spouštění, podle principu nejmenší nutné zodpovědnosti.

 

Missing HSTS Header

V souboru index.php

Popis chyby:

Webová aplikace nedefinuje záhlaví HSTS,takže je náchylná k útoku.

 

Doporučení:

Nastavte Strict-Transport-Security header

Possible Flow Control

V souboru Pico.php

Popis chyby:

Možný flow control nalezen v metodě evaluateRequestUrl.

Doporučení:

https://cwe.mitre.org/data/definitions/691.html

Path traversal

V souboru Pico.php

Popis chyby:

Metoda evaluateRequestUrl získavá data z položky REQUEST_URI. Hodnota poté neošetřená protéká kódem a je použita k získání cesty na disku. Soubor je následně načten.

Doporučení:

  1. V ideálním případě se vyhněte závislosti na dynamických datech pro výběr souboru.
  2. Ověření všech vstupů bez ohledu na zdroj. Ověření by mělo být založeno na whitelistu: spíše než odmítat

špatné vzory přijímat pouze data odpovídající dané struktuře. Kontrolujte datový typ, velikost, rozsah, formát,

očekávané hodnoty.

  1. Přijímejte dynamická data pouze pro název souboru, nikoli pro cestu a složky.

 

About fotodobias