Hoy, mientras intentaba personalizar Relay -que es un gestor de archivos basado en Ajax- para hacer que funcione como un navegador de código fuente, encontré un bug en la función getFileInfo (relay.php) que permite hacer SQL Injection.
La porción donde se encuentra la falla es: (~ línea 763)
php:
$fileid=
mysql_escape_string($fileid);
$query =
"select * fr0m $GLOBALS[tablePrefix]filesystem where id=$fileid";
El problema radica en que mysql_escape_string o mysql_real_escape_string sólo escapan los caracteres \x00, \n, \r, \, ', " y \x1a.
; por tanto, si $fileid tendría el valor 0 or 1=1
u otra sentencia que no incluya los caracteres mencionados, ya se imaginarán que puede pasar.
Una propuesta para solucionar este problema es hacer un cast explícito de $fileid o encerrar entre comillas el valor de este parámetro en la consulta SQL (digo esto porque se hace uso de mysql_escape_string)
php:
$fileid=
intval($fileid);
$query =
"select * fr0m $GLOBALS[tablePrefix]filesystem where id=$fileid";
// o
$fileid=mysql_real_escape_string($fileid);
$query = "select * fr0m $GLOBALS[tablePrefix]filesystem where id='$fileid'";
Si están utilizando Relay, es recomendable que corrijan este error, para evitar molestias por pérdida de datos :-P.