sábado, 16 de enero de 2010

Vulnerabilidades: Desbordamiento en la pila

Se trata de una vulnerabilidad en SQL Server que podría permitir la ejecución remota de código malicioso haciendo uso previamente de técnicas de intrusión como podría ser la comentada inyección de código SQL. Se trata de una vulnerabilidad clasificada en el CVE con el código 2008-5416 (aún se muestra como candidata) y descrita en el marco de “desbordamientos en la pila”.

Microsoft, que la ha catalogado de “Importante”, dedica en su boletín las correspondientes referencias para informar a sus usuarios afectados e identificando aquel software que se ve afectado por ella. Hay que tener en cuenta que esta vulnerabilidad afecta a otros productos diferentes al propio SQL Server, como pueden ser numerosas versiones de Windows Server o Microsoft Data Engine además de las distintas versiones de SQL Server hasta la versión 2005 SP2. Versiones superiores a esta se suponen libres de esta amenaza.

Se produce al realizar llamadas sobre el procedimiento extendido “sp_replwritetovarbin”, pasándole determinadas variables sin inicializar como parámetros, lo que hace que se puedan realizar escrituras de memoria sobre una localización controlada por el atacante. Dependiendo de la versión de Windows que se esté utilizando, podría ser posible ejecutar cualquier código en el contexto de SQL Server, agravándose el problema por estar ese procedimiento accesible a cualquiera en la configuración por defecto del programa. Un atacante que pueda autenticarse con cualquier tipo de permiso en la base de datos, podría realizar la llamada tras haber fijado los parámetros correspondientes y ejecutar el procedimiento, por ejemplo haciendo uso del siguiente script T-SQL:

DECLARE @buf NVARCHAR(4000),
@val NVARCHAR(4),
@counter INT
SET @buf = '
declare @retcode int,
@end_offset int,
@vb_buffer varbinary,
@vb_bufferlen int,
@buf nvarchar;
exec master.dbo.sp_replwritetovarbin 1,
@end_offset output,
@vb_buffer output,
@vb_bufferlen output,'''

SET @val = CHAR(0x41)
SET @counter = 0
WHILE @counter <>
BEGIN
SET @counter = @counter + 1
SET @buf = @buf + @val
END

SET @buf = @buf + ''',''1'',''1'',''1'',
''1'',''1'',''1'',''1'',''1'',''1'''
EXEC master..sp_executesql @buf

La llamada al procedimiento con esa serie de parámetros que no se han contemplado para su ejecución puede permitir que el atacante ejecute ese código nocivo comentado antes e instalar programas, ver, cambiar o borrar datos. También podría crear una cuenta con privilegios para tomar cierto control del sistema y llevar a cabo una labor continuada de “ataques” mientras el administrador no sea consciente de la intrusión. Este es un claro ejemplo de aquellas vulnerabilidades que puede aprovechar la inyección de código para tomar control remoto del sistema, pasando de un plano más general a pequeñas concreciones de las que se abastece el primero. Normalmente son más controlables que las referencias del plano general, arreglándose con una comprobación concreta a la hora de programar el sistema, o en este caso y por parte de los desarrolladores, de actualizar.

No hay comentarios:

Publicar un comentario