Pagina 1 din 1

Importantă vulnerabilitate la BBCode

Scris: 11-Sep-2003, 11:17:54
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.