Acceso al codigo fuente del Banco Santander Chile

Ya he publicado algunas vulnerabilidad que afectan a los clientes del Santander, esta vez escribiré sobre una vulnerabilidad que afecta directamente al Banco y que permite al atacante obtener el codigo fuente de la banca. El atacante puede navegar por los directorios en busca de los archivos “asp” y descargar el archivo, teniendo acceso al codigo fuente del sistema.

Se trata de una vulnerabilidad Local File Include + Directory Traversal = Source Code Disclosure, solo debemos modificar el valor de una variable de la URL para obtener el archivo que necesitemos. Se trata de un fallo basico e irresponsable que ningun alto estandar de seguridad permite.

Lo curioso es que segun el aviso de seguridad oficial del banco santander, hay una empresa “lider” en seguridad informática que les hace auditoría periodica:

Cierto, parece un chiste.

La vulnerabilidad está presente en el archivo “VerRentabilidad.asp”, que sirve para ver la rentabilidad de “algo”. El archivo necesita que se le entregue una variable “Numero”, al cual debemos pasarle especificamente un archivo y será descargado.
Al ver el código fuente de ese archivo, podemos ver que no tiene ningun tipo de validación al momento de realizar la descarga

        nombrePDF=Request("Numero")
        Archivo= "\Rentabilidad" & nombrePDF
        ruta=SERVER.MapPath("/transa/productos/fm") & Archivo
        'Response.Write ruta
        'Response.End
        if not ValidaArchivo(ruta) then
                Response.Redirect("InvMostrarError.asp?tipo=F")
        else
                objStream.Type = 1 'adtypeBinary
                objStream.Open
                objStream.LoadFromFile(ruta)
                Response.contentType="application/pdf"
                Response.AddHeader "content-disposition", "inline;filename=" & nombrePDF
                Response.BinaryWrite objStream.Read
                Response.Flush
                ObjStream.Close
                set objStream=nothing

        end if

En la línea 01 almacena en la variable “nombrePDF” el valor que le entegamos por URL mediante la variable “Numero”, en la variable 06 podemos ver una validación que claramente no funciona o bien no es suficiente, por lo que se ejecutan las lineas siguientes, iniciando la descarga del archivo por el lado del cliente.

Explotando esta vulnerabilidad podemos navegar por los directorios, obtener el listado de archivos, realizar descargas arbitrarias, etc.

Conociendo el arbol de directorios, ya podemos comenzar a descargar uno por uno los archivos de sistema

transa/
transa/ErrorDB/
transa/DHS/
transa/solicitud/
transa/include/
transa/Productos/
transa/Productos/include/
transa/preerror.asp
transa/logteclado.asp
transa/FuncBanco.asp
transa/common.asp
transa/cruce.asp
transa/ErrorDB/LogHOB.asp
transa/DHS/Constantes.asp
transa/DHS/DHSFuncs.asp
transa/solicitud/constantes_campana.asp
transa/include/ReadWriteSesion.asp
transa/include/TrampHBFC.asp
transa/include/prodini.asp
transa/Productos/include/ProdMenu.asp

Por ejemplo, ReadWriteSesion.asp:

ub EscribirArchivo(NameArr, Objeto, URL)
	Dim fecha, path_archivo, linea
	Dim fs, Fd

	Application.lock
	fecha = year(now()) & right("00"&month(now()),2) & right("00"&day(now()),2)
	path_archivo = left(Application("PATHINICONECT"),7) & "ErrorEstComp" & NameArr & fecha & ".txt"
	Linea = "	URL = " & URL
	Linea = Linea & "	Detalle = " & Objeto
	linea = fecha&";"& TimeValue(now()) &";" & linea
	Set fs = CreateObject("Scripting.FileSystemObject")
	Set fd = fs.OpenTextFile(path_archivo, 8, True, False)
	fd.WriteLine(linea)
	fd.close
	set fs = nothing
    Application.unlock

End Sub

Sub ProblemaTecnico

	session("CARPETACLIENTE") = ""
	session("rut") = ""
	session("dig") = ""

[...]
Function NomSession(Param)
' Compatibiliza Nombres de session antiguos por nuevos
Dim RealParam
Select Case UCase(Param)
   Case UCase("APaternoPNJPE07"): RealParam = "ApellidoPaterno"
   Case UCase("AMaternoPNJPE07"): RealParam = "ApellidoMaterno"
   Case UCase("NombresPNJPE07"): RealParam = "Nombres"
   Case UCase("subsegmento"): RealParam = "Segmento/subsegmento"
   Case UCase("MwPeCodCar"): RealParam = "Segmento/MwPeCodCar"
   Case UCase("nom_seg"): RealParam = "Segmento/NombreSegmento"
   Case UCase("clasificadas"): RealParam = "cla"
   Case UCase("IDLogin"): RealParam = "IDL"
   Case UCase("webmatico"): RealParam = "wbmat"
   Case UCase("OpcTef"): RealParam = "TipoTef"
   Case UCase("TipoURL"): RealParam = "Tipo"
   Case UCase("Op_campana"): RealParam = "Op_camp"
   Case UCase("Url_campana"): RealParam = "Url_camp"
   Case UCase("rut"): RealParam = "RUT"
   Case Else
    RealParam = Param
End Select
NomSession = RealParam
End function

Otor ejemplo, el archivo cruce.asp:

'****************************
'* Manejo de webmatico
'****************************

EsWebMatico = request.Cookies("webmatico")


if (TRIM(LCASE(EsWebMatico))="si" and Ucase(login) <> "BANCOSANTANDER" and Ucase(login) <> "SANTIAGOEXPRESS") then
        path_inicio = "webkio/bcolinea.asp"
        path_sinper = "../mensaje.htm"
        path_error  = "preerror.asp"
        path_cclave = "/transa/Cclave/fclave.asp"
        path_producto = "productos.asp"
        EsWebMatico = "si"
else
        path_inicio = SECWEBNAME & "/transa/partida.asp"
        path_sinper = SECWEBNAME & "/transa/sinpersona.htm"
        path_error  = "preerror.asp"
        path_cclave = "/transa/Cclave/fclave.asp"
        path_producto = "productos.asp"
        EsWebMatico = "no"
end if

'******** fin webmatico *********


'****************************************************************************
'*** Obtiene Rut y Ping del Cliente             *************************************
'****************************************************************************
  rut= ucase(trim(Request.Form("rut")))                          'recibe el rut
  pin= trim(Request.Form("pin"))                                 'recibe el pin
  utv= trim(Request.Form("usateclado"))                          'recibe el uso de teclado virtual
  ven= trim(Request.Form("dondeentro"))
  rslAlto= trim(Request.Form("rslAlto"))                            'resolución pantalla browser del cliente
  rslAncho= trim(Request.Form("rslAncho"))                          'resolución pantalla browser del cliente


  state = 0
  if rut <> "" then
    state = verificador(rut)                                'revisa el digito verificador
  end if
'****************************************************************************

  If rut <> "" and pin <> "" and state = 0 and len(pin) = 4 then         'Si esta todo bien

                '**************************************************************************
                '**** Consulta si Cliente si Esta Bloqueado por 60 Minutos      ***************
                '**************************************************************************

Segun lo que podemos leer en los comentarios del codigo fuente, corresponde a un desarrollo del año 2006, estamos casi en el 2012. El Banco Santander, ademas de mentirle a sus clientes y usuarios diciendoles que es un sitio seguro, fue denominado como el sistema de banco mas seguro de latinoamerica.

A todas las personas que lean este artículo:
– El banco santander NO es el mas seguro, probablemente sea el mas inseguro.
– Una falla de seguridad de este tipo no puede ser permitida, es una vulnerabilidad demasiado CRITICA como para que un banco la tenga presente.
– El Banco no implementa las mejores ni las ultimas tecnologias, tampoco implementa los ultimos estandares de seguridad. Usan tecnologias obsoletas y poco robustas.
– Esta es una vulnerabilidad que afecta al banco y que podria eventualmente afectar a TODOS sus clientes. El atacante que acceda a informacion como el codigo fuente de un sistema, probablemente pueda acceder a otro tipo de informacion.
– No es la unica vulnerabilidad que existe en este banco, ya he hecho publicar por lo menos 4 otras.
– Que el banco tenga un certificado de un millon de bits, no lo hace mas seguro.

A los encargados de seguridad de los bancos u otras entidades:
– La seguridad no es unicamente enviar emails y dar consejos tipo “no abras links”
– La seguridad de tu institucion no depende de un certificado SSL.

Los encargados de seguridad de este banco no pueden hacer oidos sordos a este tipo de anuncios, son vulnerabilidades presentes hace mas de 1 año. Pesonalmente llevo mas de 1 año intentando reportar por distintos medios este tipo de fallas. Es una falta de respeto hacia los clientes.
Ademas, la vulnerabilidad está indexada por Google, hagan la siguiente busqueda:
site:santander.cl inurl:VerRentabilidad
No es necesario estar logueado en el sistema para poder explotarla.

Solo me queda una pregunta… ¿Cual será esa empresa LIDER en seguridad informática que audita el sistema del Santander?

15 comentarios

  1. Si TaisaChile es la que hizo sistema no me extrañan las vulnerabilidades un sitio wordpress desactualizado y con tremendo fallo pfffff

  2. muchas gracias@Zerial, para los que intentamos aprender de esto es muy util tu trabajo, ojala existiera mas gente como nuestro mundo seria mucho mejor.
    por cierto, hay dos palabras que me gustan: neg.ocio (negar el ocio) y sacerd.ocio (volver sagrado el ocio)
    un abrazo.

  3. Despues de las respuestas del banco, creo que deberias denunciar esta vulnerabilidades a las Superintendencia. Alguien los tiene que parar.

  4. @Ariel Y que haría la superintendencia?? y a cual?? la SBIF?? Creeme que son tan burócratas que tienes q establecer un reclamo y luego ellos dan un plazo a la institución para que “responda”… Y por lo demás, no creo q conozcan de seguridad bancaria. Idem la nueva superintendencia de telecom.

    Saludos

    @Zerial gracias por la respuesta, era obvio que no habia validación de sesión xD, no caché. Pero ojo que a veces, por logica de negocio, al menos los simuladores de crédito no deberían tener validación de sesión por correr en contextos públicos. Que se hace ahí?

    Saludos

  5. La empresa que administra los firewall aplicativos que “deberían” proteger contra estos ataques los administra NOVARED, esa es la empresa de seguridad.

  6. Interesante todo, incluso los comentarios… pero zerial has cometido un delito informático que es penado por la ley… no se si en Chile tengan leyes de delitos informáticos, pero en mi país o en USA ya estarías preso. Es lamentable que no tengan leyes de ese tipo; pero a la vez afortunado porque sin estas leyes al menos se obliga a la banca a mejorar sus paupérrimos sistemas.

  7. Hola Raul: Te invito a leer las leyes de delitos informaticos en Chile:

    http://delitosinformaticos.com/legislacion/chile.shtml

    🙂

  8. Los 4 articulos de la ley de delitos informáticos dejan todo a interpretación; “maliciosamente, con animo de apoderarse”, en fin. Como demuestras el “dolo” en las acciones de Zerial? Yo al menos, no lo veo, no se que dice un abogado

  9. Hace 5 meses deje expuesto en esta pagina este mismo fallo en el siguiente link de este sitio

    http://blog.zerial.org/seguridad/el-phishing-y-el-banco-santander-chile/

    En ese entonces Zerial me dijiste que no habia fallo explotable en el archivo VerRentabilidad.asp

    Lo bueno es que ahora si va a ser solucionado

  10. Hola TimeT!

    Es impresionante la cantidad de gente que conocia esta vulnerabilidad … Cuanta gener podria o pudo haber sacado provecho? Ante la negligencia del banco, lo mejor es el full disclosure para “obligarlos” a que lo solucionen

  11. Que increible, denuncias y hasta de criminal se te acusa.
    Tiene razon el dicho “descubre tierras nuevas y te dejan sin el pico ni las wevas”

  12. Me queda la duda de qué pasa en otros lugares del mundo, ya que noto que el homebanking de una misma marca es totalmente distinto de un país a otro. Estaría bueno comprobar el Santander de Argentina, por ejemplo.

    Lo peor es que no son vulnerabilidades importantes —aunque sí graves—, son cosas que cualquier desarrollador con medio dedo de frente no deja libradas al azar ni para un sitio web con una visita al mes. Son errores de irresponsables.

  13. Una vez alguien dijo.. Chile Pais de Pitutos. y los hijos de papi que. Reprobaron la universidad en el segundo o 3 año de una carrera de 6. No encontraron nada mejor, Que apitutarse en las areas de informatica.. si supieran el numero de empresas que tienen informaticos Lammers.. Se caerian de raja.. dare un ejemplo.. Ripley y otro ejemplo.. hoy me encontre un amigo.. que conto que trabajaba en Conafe. Y pense 2 cosas…

    La primera el papi le habra conseguido ese puesto…

    y la segunda.. Debe ganar el medio billete y no tiene idea como hacer su pega.

    en fin… Los realmente capaces no los pescan porque no tienen pituto.. y los lammers abundan con sus teorias futuristas.. y llenas de conocimientos obsoletos.. y digo obsoletos porque ovbiamente al reprobar la carrera completa en la universidad creen que lo que aprendieron hace 6 años aun esta vigente.. siendo que de vigencia solo tienen su apellido aleman.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.