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?

49 comentarios

  1. La voladita…
    nótese el comentario del último ejemplo que pones…

    El comentario dice:

    ‘*** Obtiene Rut y Ping del Cliente *********

    Para hablar del “pin”

    pin= trim(Request.Form(“pin”)) ‘recibe el pin

    jajajaja wn’s pencas.

  2. (._.) quede K.O !! no puede ser posible que el diseño de las paginas esten desde el 2006 !!

  3. la cantidad de weas que podi hacer con esto…realmente uno de los bancos mas xanta

  4. El tema es que es no puedes exponer tu codigo fuente es imperdonable

  5. y ya le hiciste saber todos estos fallos al banco?

  6. Hola “rg”, si .. Pero no hay respuesta. Ahora recien, la persona encargada de la empresa que desarrolla el sistema (externa al banco) se esta contactando conmigo … Despues de casi 1 año

  7. Hice la busqueda en site:santander.cl inurl:VerRentabilidad y no sale nada salvo un par de PDF… cual es la vulneravilidad? son documentos informativos.

  8. El problema no es que mientan… el problema es si dicen la verdad, ¿y si este realmente fuera el banco mas seguro de latinoamerica? (¿y los otros fueran peores aun?)

  9. @Rodrigo: Hola! Cambia el nombre de ese PDF y pon uno de un ASP, veras como descargas el archivo ASP con el codigo fuente del sistema 😉

    Esa es la vulnerabilidad. ¿Arbitrary File download?

  10. respondiendo a tu pregunta… bueno no estoy seguro pero creo que es SONDA.

  11. Miguel: Sonda? no me sorprenderia…

  12. un amigo trabaja para santander, le preguntare. para confirmar.

  13. que buena la vulnerabilidad, parece ser que se dedicaron a los certificados a los links antivirus y demases…
    y se les olvido el codigo fuente que mermes
    La entidad bancaria mas segura? como sera la peor entonces, no quiero ni saber.

  14. jamas escuche de auditorias de empresas lideres en seguridad, si de practicantes 😛 maldeto outsorsing perdon no lo pude evitar,pero revisando el codigo solo hay una violacion a las normas…. los programadores solo cambian los bloques de codigo que ellos necesitan no necesariamente actualizan fechas y nombres de autores.

  15. Es increíble lo complejo del código para tareas sencillas, lo mezclado que esta la lógica del sistema con la presentación (no hay separación de capas), al menos no parece que esten filtrando el texto (un trim no es filtro :P) para evitar Inyecciones SQL y XSS, y encima ASP apesta. Y les cobran miles de dolares por eso?!

  16. Santander, el banco más grande de Chile. Al parecer estos “gigantes”, entre su tamaño se olvidaron de sus clientes hace mucho tiempo.

  17. Yo creo que la empresa de seguridad lider, debe ser la empresa del hijo o algun familiar o amigo del gerente a cargo del area y asi se hacen ricos los ricos tontos y mas pobres los pobres inteligentes.

    Salu2

  18. como comentario extra, si la empresa encargarda del desarrollo y seguridad es SONDA, no me extraña lo penca que son, SONDA es buena para soporte HARDWARE pero lo que es software son pesimos y quedo mas que demostrado cuando el señor lagos les dio el contrato de control de flota del transachantiago cambio de apoyo monetario para su campaña presidencial. El control de flota nunca funciono y hasta el dia de hoy creo que no funciona, pero SONDA recive su pago de todas formas, el señor lagos sigue andan en mercedez pagado con nuestros impuestos y lo unicos que la pasamos mal son los cuidadanos comunes que pagamos todos los nuestros impuestos, disculpar si ofendo a alguien pero esto de las familias del poder en chile ya me tiene gordo, todos los dias vemos como nos ponen el pie ensima y no hacemos nada, para las proximas elecciones voten por independientes para que la corten esos mafiosos de la politica.

    Salu2

  19. Se me olvidaba.
    Felicitaciones por tu trabajo @Zerial
    Sigue adelante con lo que haces, me parece excelente.

  20. Don Zerial, realmente muy ilustrativo, felicitaciones por el trabajo bien hecho, y que entiendo, lo haces solo por diversión.
    Tienes algún link por ahi para lectura para los que queremos aprender?

    Saludos

  21. Felicitaciones compadre. Este es un blog que sin duda vale la pena leer.

  22. Un LFI en un Banco… cuantas vuln debe tener Santander para que tomen en serio su seguridad y asuman su responsabilidad?, si tienen un problema asumanlo en vez de estar a escondidas arreglando a prueba y error, cuantos clientes deben ser vulnerados,k cuantos informes especiales deben pasar??… (otro xss, este funciona logueado).. https://www.santander.cl/transa/productos/fm/Doctosdisposicionb.asp?codigofondo=%20%2090&texto=“>alert(“XSS”)

  23. Eso sin contar que el Santander te deja tomar PAC/PAT a nombre de otra persona desde su pagina…. Genial!.. (modo ironico on) el nuevo dinero!!!, usa tarjetas!!! es mas seguro!!!.. si seguro…. permitiendo el fraude asi de facil y desde su Web. (modo ironico off)

  24. http://200.68.2.74 –> Les suena falla de seguridad en Servipag? Y eso que son lideres!!

  25. Y como son chantas van a bloquear las URL una a una con un robots.txt xD

    Como si fuera muy difícil ver el archivo para ir directo a la url y descargar lo que necesitemos…

  26. La empresa que desarrolla esos sitios es ISBAN ex ALTEC

  27. Zerial si necesitas que te haga contacto con la persona indicada para converzar sobre este tema avisame y converzamos, podrias ganarte un buen trabajo en Santander.

  28. Gracias a todos por sus comentarios y apoyo, esto lo hago para ustedes! Alguien tiene que jugarsela y decir la verdad.

    Como dice Anonimo en el comentario de arribita, ya lo solucionaron .. Pero tuvimos que llegar a esto, una publicacion, vista por mas de 3 mil personas, cuestionada por MUCHOS usuarios, muchos clientes desconformes.. recien ahora lo solucionan. No se porque pero no me sorprende…

  29. Zerial / exploit-shell increible, pude confirmar lo del LFI y ahora que veo lo del PAC / PAT es impresionante, pude ver los PAT de otra persona incluso podia asignarle un nuevo PAT sin necesitar su codigo de verificaciòn. Impresentable que el Banco Santander permita este tipo de robo de dinero a sus clientes.

  30. Quizás porque no tenían ni idea del fallo, y hubo que comunicárselo?? No se a quién lo reportaste tú, pero parece ser que no les llegó. Y tu blog como comprenderás no es un periódico que llega a todo el mundo.
    Me gustaría que muchos auditores, se dedicasen a programar y a desarrollar. Encontrar vulnerabilidades es una tontería. Sólo hay que tener tiempo libre.

  31. Hola Anonimo, yo soy desarrollador 🙂

    ah, otra cosa, te invito a entrar a santander.cl y buscar una forma de contacto para reportar fallas, si la encurentras me avisas.. yo hasta contacte con una ejecutiva de cuentas. si no les llego la informacion a la empresa desarrolladora es problema de procedimientos, quiere decir que no tienen ningun estandar ni politica de seguridad de la informacion o informatica.

    si piensas que es una tonteria encontrar vulnerabilidades, ok, entonces somos unos tontos? 🙂

  32. que ñoños…. todo el dia en el pc….. los normales, no entendemos de estas weas… ñoños culiaos.. mejor será de que ocupen sus conocimientos, le saquen plata a estos weones.- y los depositen en las cuentas de ANDHA Chile…..

  33. Los normales??? perdón pero no te incluyas en esa categoría, insultando a quienes te quieren ayudar.
    Incitando al robo y más encima pidiendo plata para esos patudos de mierda de andha…mira, una lata que no puedan pagar su casa, pero eso NO es culpa del resto ni del gobierno…y para ti :
    Chúpalo aweonao, anda a comentar a otra parte, si no entiendes de estas weas vírate, anda a lavarte la raja. Y eso que ando tranquilo.

  34. Muy buen articulo compadre…se ve el tiempo y dedicacion a tu labor o mas bien a tu hobby (jajaj)
    como dice Anonimo ” Sólo hay que tener tiempo libre” (hacer nada??)toda la razon pero uno le pone precio y valor a su tiempo.. tu lo ocupás y lo dedicas aprendiendo y investigando el resultadno esta a la vista .. si ademas cre q “Encontrar vulnerabilidades es una tontería” podriamos dejarlo invitado a que se una a los “tontos” y busque una falla y nos la comunique.

  35. LA EMPRESA SE LLAMA NEOSECURE

  36. Excelente zerial como siempre, es increible a lo que estan expuestos el “nomal” de las personas en cosas que no tienen ni idea que existen y confian en 100% en sus entidades bancarias.

    Saludos.

  37. wow… la empresa que hizo ese Script en particular creo que fue TaisaChile : http://www.taisachile.cl/?page_id=16.

    HinferNal esta usted en su derecho de no visitar mas es blog.

    Saludos Zerial.

  38. Reconozco el merito en lo que has hecho al detectar vulnerabilidades críticas que afectan a los clientes y que tu intención es lograr una web más segura. Ahora tambien debes reconocer que eres un poco irresponsable al hablar de los proveedores del banco, puesto que no conoces quienes o cuantos son. Solo te basas en un fuente creado hace años que puede tener cambios hasta el dia de hoy por muchos proveedores .

  39. Parece que hay aca gente “anonima” xD del Santander o de los proveedores y se sienten despechados en vez de hacer bien su trabajo.

  40. Brígido esto, no me sorprendería que fueran estas simples empresas que se hacen llamar líderes como dicen más arriba “SONDA” de la mano del gran nerd con Stark. El problema yo creo que es simplemente en mentir y más encima salir pillado.

    Ahora, hace rato que venía escuchando que Santander no modifica sus base de datos desde 2006 y más encima no ha cambiado diseño nada. Entonces, qué nos queda, capacito que también tengan alojado el server en uno gratuito jajajajá.

    Un saludo para Santander y a todas las cuentas!

  41. ASP compadres! aunque diría que el error principal radica en la arquitectura, aunque el código de programación te permitiera no validar nada, obtener archivos debiera ser imposible sin mantener una sesión abierta … nuevamente ASP ! con apache cierras los accesos, generas directorios divididos, etc, etc. etc… vean la página de scotiabank, esa tiene una vulnerabilidad de sesión impresionante, las sesiones no caducan en el cliente y son recuperables. Hasta ahora el banco más atadoso y confiable en su página web, al menos para mi es BCI.

  42. El Santander simplemente no cuida a sus clientes, por ejemplo con esta URL puedes saber si un RUT pertenece es cliente del Santander o no: http://www.santander.cl/simuladores/credito_consumo/get_user.asp?rut=111111111

  43. Otro ejemplo, con esta URL puedes saber por cuanta plata le daria credito el Santander, solo cambia el RUT para saber el monto de crédito, de esta forma puedes estimar cuan riesgoso es el cliente del santander: http://www.santander.cl/serv_raspe.asp?d_rut=111111111

  44. xzite: Gracias por la contribucion.

    Es muy comun que no se valen esas peticiones por ajax a “escondidas” que hacen los sistemas para validar o autocompletar datos, es cosa de interceptar las llamadas GET o POST que hay cuando ingresas al sitio y podemos encontrar muchas cosas como estas…

  45. Entonces, los bancos deberían tratar de evitar el uso de ajax?
    Que sería mejor en tu opinion? Si hacer una llamada ajax y devolver una plantilla o devolver un JSON con datos de respuesta?

  46. jchacana: Hola! AJAX sirve … usar webservice, usar json, etc etc… pero hay que usar SESIONES y validar parametros! No porque estan “escondidos” el usuario no los encontrara… SI al final, se ajax o no, el request sale desde tu navegador.

    No puede ser que cualquier persona pueda llamarlos ..

1 Pingback

  1. Pingback: Banco Santander el mas (in) seguro

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.