Importantă vulnerabilitate la BBCode

Înainte de a începe să scrii un nou mesaj citeşte ultimele anunţuri şi regulamentul forumului.
Reguli forum
Aveti o problema si vreti sa primiti ajutor? Click aici ! Nu uitati si de regulamentul forumului !
Avatar utilizator
mihaitza
Fost coleg
Mesaje: 1873
Membru din: 13-Ian-2003, 22:22:10
Versiune: 3.0.5
Ext: Nu
Server: Windows
Nivel phpBB: Experimentat
Localitate: Cluj-Napoca, România
Contact:

Importantă vulnerabilitate la BBCode

Mesaj de mihaitza »

phpbb.com anunţă despre o vulnerabilitate importantă în 2.0.6 (care se reflectă şi la 2.0.5 şi 2.0.5). Rezolvarea este mai jos dar fiţi atenţi la notiţele care sunt ataşate.

Totodată, toate pachetele pentru download au fost modificate deci nu este necesar dacă aţi downloadat pachetele după 10 septembrie, să realizaţi aceste modificări.

O schimbare a fost făcută la tagul url din bbcode la versiunea 2.0.4 în urma plângerilor de la utilizatori despre metodele existente folosite în pachetele phpBB că sunt prea restrictive. Din păcate s-a renunţat la prea multe restrucţii. În final, prin diferite metode, utilizatorii puteau lua date din cookie-uri.

Astfel această modificare a codului e cât se poate de serioasă ... şi sunt sfătuiţi toţi utilizatorii să o realizeze cît se poate de urgent.

Puteţi folosi orice editor de texte, pe orice sistem de operare, care vin cu o serie de aplicaţii cum ar fi notepad/wordpad - Windows, ed/pico/vi/emacs - Linux/UNIX/*BSD, etc.

Deschideţi fişierul: includes/bbcode.php

Găsiţi urmâtoarea secvenţă de cod :

Cod: Selectaţi tot

$bbcode_tpl['url4'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']); 
   $bbcode_tpl['url4'] = str_replace('{DESCRIPTION}', '\\5', $bbcode_tpl['url4']); 
şi o înlocuiţi cu :

Cod: Selectaţi tot

$bbcode_tpl['url4'] = str_replace('{URL}', 'http://\\1', $bbcode_tpl['url']); 
   $bbcode_tpl['url4'] = str_replace('{DESCRIPTION}', '\\3', $bbcode_tpl['url4']);
Căutaţi :

Cod: Selectaţi tot

// matches a [url]xxxx://www.phpbb.com[/url] code.. 
   $patterns[] = "#\[url\]([\w]+?://.*?[^ \"\n\r\t<]*?)\[/url\]#is"; 
   $replacements[] = $bbcode_tpl['url1']; 

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix). 
   $patterns[] = "#\[url\]((www|ftp)\.([\w\-]+\.)*?[\w\-]+\.[a-z]{2,4}(:?[0-9]*?/[^ \"\n\r\t<]*)?)\[/url\]#is"; 
   $replacements[] = $bbcode_tpl['url2']; 

   // [url=xxxx://www.phpbb.com]phpBB[/url] code.. 
   $patterns[] = "#\[url=([\w]+?://.*?[^ \"\n\r\t<]*?)\](.*?)\[/url\]#is"; 
   $replacements[] = $bbcode_tpl['url3']; 

   // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix). 
   $patterns[] = "#\[url=((www|ftp)\.([\w\-]+\.)*?[\w\-]+\.[a-z]{2,4}(:?[0-9]*?/[^ \"\n\r\t<]*)?)\](.*?)\[/url\]#is"; 
   $replacements[] = $bbcode_tpl['url4'];
şi înlocuiţi cu :

Cod: Selectaţi tot

// matches a [url]xxxx://www.phpbb.com[/url] code.. 
   $patterns[] = "#\[url\]([\w]+?://[^ \"\n\r\t<]*?)\[/url\]#is"; 
   $replacements[] = $bbcode_tpl['url1']; 

   // [url]www.phpbb.com[/url] code.. (no xxxx:// prefix). 
   $patterns[] = "#\[url\]((www|ftp)\.[^ \"\n\r\t<]*?)\[/url\]#is"; 
   $replacements[] = $bbcode_tpl['url2']; 

   // [url=xxxx://www.phpbb.com]phpBB[/url] code.. 
   $patterns[] = "#\[url=([\w]+?://[^ \"\n\r\t<]*?)\](.*?)\[/url\]#is"; 
   $replacements[] = $bbcode_tpl['url3']; 

   // [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix). 
   $patterns[] = "#\[url=((www|ftp)\.[^ \"\n\r\t<]*?)\](.*?)\[/url\]#is"; 
   $replacements[] = $bbcode_tpl['url4']; 
Cautaţi:

Cod: Selectaţi tot

// matches an "xxxx://yyyy" URL at the start of a line, or after a space. 
   // xxxx can only be alpha characters. 
   // yyyy is anything up to the first space, newline, comma, double quote or < 
   $ret = preg_replace("#(^|[\n ])([\w]+?://.*?[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret); 

   // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing 
   // Must contain at least 2 dots. xxxx contains either alphanum, or "-" 
   // zzzz is optional.. will contain everything up to the first space, newline, 
   // comma, double quote or <. 
   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\-]+\.[\w\-.\~]+(?:/[^ \"\t\n\r<]*)?)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret); 
şi înlocuiţi cu:

Cod: Selectaţi tot

//matches an "xxxx://yyyy" URL at the start of a line, or after a space. 
   // xxxx can only be alpha characters. 
   // yyyy is anything up to the first space, newline, comma, double quote or < 
   $ret = preg_replace("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret); 

   // matches a "www|ftp.xxxx.yyyy[/zzzz]" kinda lazy URL thing 
   // Must contain at least 2 dots. xxxx contains either alphanum, or "-" 
   // zzzz is optional.. will contain everything up to the first space, newline, 
   // comma, double quote or <. 
   $ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
Acum salvaţi fişierul şi uploadaţi-l pe server peste fişerul existent cu acelaş nume.

Aceasta ar trebui să rezolve problema ... dacă găsiţi ceva care nu se potriveşte vă rugăm să ne anunţaţi ataşând detalii complete despre cum nu funcţionează, versiunea PHP-ului instalat şi versiunea care funcţionează.

Mai multe detalii (în limba engleză) : aici.
Scrie răspuns

Înapoi la “Anunţuri”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 3 vizitatori