security - vulnerabilidad - ¿El peor agujero de seguridad que has visto?
problemas de vulnerabilidad (30)
¿Cuál es el peor agujero de seguridad que has visto? Probablemente sea una buena idea mantener los detalles limitados para proteger a los culpables.
Para lo que vale, aquí hay una question sobre qué hacer si encuentra un agujero de seguridad, y another con algunas respuestas útiles si una compañía no responde (parece).
Al ser un asesor de seguridad de aplicaciones para la vida, hay muchos problemas comunes que le permiten obtener administración en un sitio web a través de algo. Pero la mejor parte es cuando puedes comprar un millón de dólares en calcetines.
Era un amigo mío que trabajaba en este concierto, pero el problema era que los precios de los artículos de una tienda en línea (y todo lo demás) en línea, ahora muy popular, se almacenaban en el propio HTML como un campo oculto. En los primeros días, este error afectaba a muchas tiendas en línea, apenas estaban empezando a descubrir la web. Muy poco conocimiento de seguridad, me refiero a quién va a descargar el HTML, editar el campo oculto y volver a enviar el pedido.
Naturalmente, cambiamos el precio a 0 y pedimos 1 millón de pares de calcetines. También puede cambiar el precio a negativo, pero al hacer esto, parte del búfer del software de facturación back-end se desbordó y terminó la transacción.
Si pudiera elegir otro, sería por problemas de canonización en las aplicaciones web. Es maravilloso poder hacer foo.com?file=../../../../etc/passwd
Aunque este no es el peor agujero de seguridad que he visto. Pero esto es al menos lo peor que me he descubierto:
Una exitosa tienda en línea para audiolibros utilizó una cookie para almacenar la información de identificación del usuario actual después de la autenticación exitosa. Pero puede cambiar fácilmente la ID de usuario en la cookie y acceder a otras cuentas y comprar en ellas.
Confirmando la contraseña de la raíz de la base de datos al control de origen por accidente. Fue bastante malo, porque era control de código fuente en Sourceforge.
No hace falta decir que la contraseña se cambió muy rápidamente.
Creo que el campo de usuario / contraseña en blanco para el acceso de superusuario es, con mucho, el peor. Pero uno que me he visto fue
if (password.equals(requestpassword) || username.equals(requestusername))
{
login = true;
}
Lástima que un operador haga una gran diferencia.
Cuando me uní a la empresa en la que trabajo actualmente, mi jefe estaba revisando el sitio web de comercio electrónico existente de un posible nuevo cliente. Esto sucedió en los primeros tiempos de IIS y del comercio electrónico, y la seguridad fue, digamos, menos estricta.
Para acortar una larga historia, modificó una URL (solo por curiosidad) y se dio cuenta de que la búsqueda en el directorio no estaba desactivada, por lo que solo podía cortar el nombre de la página al final de la URL y ver todos los archivos en la Servidor web.
Terminamos navegando en una carpeta que contenía una base de datos de Access, que descargamos. Era la base de datos completa de clientes / pedidos de comercio electrónico, repleta de varios miles de números de tarjetas de crédito sin cifrar.
Cuando tenía 13 años mi escuela abrió una red social para los estudiantes. Desafortunadamente para ellos, encontré un error de seguridad en el que podría cambiar el URI a otro ID de usuario como "? IDUsuario = 123" y registrarse para ese usuario. Obviamente se lo conté a mis amigos, y al final la red social de las escuelas estaba llena de pornografía.
Aunque no lo recomendaría.
Dar 1 = 1 en un cuadro de texto enumera todos los usuarios en el sistema.
Desde los primeros días de las tiendas en línea:
Obtener un descuento del 90% al ingresar .1 en el campo de cantidad del carrito de compras. El software calculó correctamente el costo total como costo de .1 *, y el paquete de la orden humana simplemente pasó por alto lo impar "." en frente de la cantidad a empacar :)
El mío sería para un banco del que era cliente. No pude iniciar sesión, así que llamé a servicio al cliente. Me pidieron mi nombre de usuario y nada más, no hicieron preguntas de seguridad ni intentaron verificar mi identidad. Luego, en lugar de enviar un restablecimiento de la contraseña a la dirección de correo electrónico que tenían archivada, me preguntaron a qué dirección de correo electrónico enviarla. Les di una dirección diferente a la que tenía en el archivo y pude restablecer mi contraseña.
Esencialmente, todo lo que un hacker necesitaría es mi nombre de usuario, y luego podría acceder a mi cuenta. Esto fue para un banco importante del que al menos el 90% de las personas en los Estados Unidos hubieran oído hablar. Esto sucedió hace unos dos años. No sé si fue un representante de servicio al cliente mal capacitado o si ese fue un procedimiento estándar.
El peor agujero de seguridad que he visto fue realmente codificado por el tuyo y causó que Google Bot elimine toda mi base de datos.
Cuando empecé a aprender ASP clásico, codifiqué mi propia aplicación básica de blog. El directorio con todos los scripts de administración estaba protegido por NTLM en IIS. Un día me mudé a un nuevo servidor y olvidé volver a proteger el directorio en IIS (oops).
La página de inicio del blog tenía un enlace a la pantalla principal de administración, y la pantalla principal de administración tenía un BORRAR ENLACE para cada registro (sin confirmación).
Un día encontré todos los registros en la base de datos eliminados (cientos de entradas personales). Pensé que algún lector había irrumpido en el sitio y había eliminado maliciosamente todos los registros.
Descubrí los registros: Google Bot rastreó el sitio, siguió el enlace de administración y procedió a seguir todos los BORRAR ENLACES, eliminando así todos los registros de la base de datos. Sentí que merecía que el Google Bot comprometiera inadvertidamente el premio Dumbass of the Year.
Afortunadamente tuve copias de seguridad.
El peor hoyo que he visto fue un error en una aplicación web donde dar un nombre de usuario y una contraseña vacíos lo iniciaría como administrador :)
Espero que puedas detectar lo que está mal aquí. (Terriblemente mal, de hecho):
String emailBody = "";
for (int i = 0; i < subscribers.Count; i++)
{
emailBody += "Hello " + subscribers[i].FirstName + ",";
emailBody += "this is a reminder with your account information: /n/n:";
emailBody += "Your username: " + subscribers[i].Username + "/n";
emailBody += "Your password: " + subscribers[i].Password + "/n";
emailBody += "Have a great day!";
emailDispatcher.Send(subscribers[i].EmailAddress, emailBody);
}
El último destinatario fue el más feliz;)
Ingeniería social:
<Cthon98> hey, if you type in your pw, it will show as stars
<Cthon98> ********* see!
<AzureDiamond> hunter2
<AzureDiamond> doesnt look like stars to me
<Cthon98> <AzureDiamond> *******
<Cthon98> thats what I see
<AzureDiamond> oh, really?
<Cthon98> Absolutely
<AzureDiamond> you can go hunter2 my hunter2-ing hunter2
<AzureDiamond> haha, does that look funny to you?
<Cthon98> lol, yes. See, when YOU type hunter2, it shows to us as *******
<AzureDiamond> thats neat, I didnt know IRC did that
<Cthon98> yep, no matter how many times you type hunter2, it will show to us as *******
<AzureDiamond> awesome!
<AzureDiamond> wait, how do you know my pw?
<Cthon98> er, I just copy pasted YOUR ******''s and it appears to YOU as hunter2 cause its your pw
<AzureDiamond> oh, ok.
De bash.org
Justo al comienzo de la era .com, estaba trabajando para un gran minorista en el extranjero. Observamos con gran interés que nuestros competidores lanzaron una tienda en línea meses antes que nosotros. Por supuesto, fuimos a probarlo ... y rápidamente nos dimos cuenta de que nuestros carritos de compras se estaban confundiendo. Después de jugar un poco con la cadena de consulta, nos dimos cuenta de que podíamos secuestrarnos las sesiones. Con una buena sincronización, puede cambiar la dirección de entrega pero dejar el método de pago solo ... todo eso después de haber llenado el carrito con sus artículos favoritos.
La verdadera historia de mis primeros días en Microsoft.
No has conocido el miedo hasta el día en que te levantas y ves el titular en ZDNet.com esa mañana es "El peor agujero de seguridad de Internet Explorer se ha descubierto en ''Blah'' ", donde ''Blah'' es el código que escribiste seis meses antes. .
Inmediatamente después de ir al trabajo, revisé los registros de cambios y descubrí que alguien en otro equipo, alguien en quien confiamos para hacer cambios en el producto, había revisado mi código, cambiado un montón de configuraciones de claves de registro de seguridad sin ninguna razón, Lo revisé de nuevo y nunca obtuve una revisión del código ni se lo conté a nadie. Hasta el día de hoy no tengo idea de qué demonios pensaba que estaba haciendo; Salió de la empresa poco después. (De su propia voluntad.)
(ACTUALIZACIÓN: Algunas respuestas a las cuestiones planteadas en los comentarios:
Primero, tenga en cuenta que elijo tomar la posición caritativa de que los cambios en la clave de seguridad no fueron intencionales y se basaron en el descuido o la falta de familiaridad, en lugar de la maldad. No tengo evidencia de una forma u otra, y creo que es sabio atribuir los errores a la falibilidad humana.
Segundo, nuestros sistemas de registro son mucho, mucho más fuertes ahora que hace doce años. Por ejemplo, ahora no es posible ingresar el código sin que el sistema de registro envíe por correo electrónico la lista de cambios a las partes interesadas. En particular, los cambios realizados al final del ciclo de envío tienen muchos "procesos" a su alrededor que garantizan que se realicen los cambios correctos para garantizar la estabilidad y seguridad del producto.)
De todos modos, el error fue que un objeto que NO era seguro de usar desde Internet Explorer fue lanzado accidentalmente como marcado como "seguro para secuencias de comandos". El objeto era capaz de escribir archivos binarios, de hecho bibliotecas de tipo OLE Automation, en ubicaciones de disco arbitrarias. Esto significaba que un atacante podría crear una biblioteca de tipos que contenía ciertas cadenas de código hostil, guardarla en una ruta que fuera una ubicación ejecutable conocida, darle la extensión de algo que causaría la ejecución de un script y esperar que de alguna manera el usuario accidentalmente ejecutaría el código. No conozco ningún ataque exitoso del "mundo real" que usara esta vulnerabilidad, pero fue posible crear un exploit funcional con él.
Enviamos un parche bastante rápido para eso, déjame decirte.
Provocé y posteriormente reparé muchos más agujeros de seguridad en JScript, pero ninguno de ellos se acercó a la publicidad que uno tenía.
Los antiguos terminales tontos de IBM System 36 tenían una combinación de teclado que iniciaba la grabación de una macro. Por lo tanto, cuando un terminal no estaba conectado, puede iniciar la grabación de una macro y dejarla en esa posición. La próxima vez que alguien inicie sesión, las pulsaciones de teclas se grabarán en la macro y la grabación finalizará automáticamente cuando se graben las teclas de máximo permitido. Simplemente vuelva más tarde y vuelva a reproducir la macro para iniciar sesión automáticamente.
No cambiar las contraseñas de administrador cuando los empleados clave de TI abandonan la empresa.
No menos en una universidad, que permanecerá sin nombre, tuvieron todas sus consultas de acción pasadas a través de la URL en lugar de la forma publicada.
La cosa funcionó de maravilla hasta que Google Bot apareció y corrió a través de todas sus URL y borró su base de datos.
Sorprendido, nadie ha mencionado la ingeniería social, pero me encantó este artículo .
Resumen: los usuarios malintencionados pueden comprar unas pocas docenas de unidades flash, cargarlas con un virus o un troyano de ejecución automática, y luego rociar dichas unidades flash en el estacionamiento de una compañía a altas horas de la noche. Al día siguiente, todos se presentan al trabajo, se tropiezan con el hardware brillante, en forma de caramelo, irresistible y se dicen a sí mismos "oh wow, flash drive gratis, ¡me pregunto qué hay ahí!" - 20 minutos después, toda la red de la empresa se encuentra abierta.
Tenía la antigua dirección de Joe X y necesitaba saber su nueva dirección actual en la misma ciudad, pero no tenía forma de contactarlo. Me di cuenta de que estaba recibiendo la pila diaria habitual de catálogos de pedidos por correo, por lo que arbitrariamente llamé al número 800 de See''s Candies (a diferencia de Victoria''s Secret, Swiss Colony o cualquier otro gran correo):
Yo: "Hola, soy Joe X. Creo que me tienes en tu lista de correo dos veces, tanto en mi antigua dirección como en mi nueva dirección. ¿Tu computadora me muestra en [dirección antigua] o en [dirección falsa]? ? "
Operador: "No, te mostramos en [nueva dirección]".
Una vez notado esto en la URL de un sitio web.
http://www.somewebsite.com/mypage.asp?param1=x¶m2=y&admin=0
Cambiar el último parámetro a admin = 1 me dio privilegios de administrador. Si va a confiar ciegamente en las opiniones de los usuarios, ¡al menos no diga que lo está haciendo!
Vi este en el Daily WTF .
<script language="javascript">
<!--//
/*This Script allows people to enter by using a form that asks for a
UserID and Password*/
function pasuser(form) {
if (form.id.value=="buyers") {
if (form.pass.value=="gov1996") {
location="http://officers.federalsuppliers.com/agents.html"
} else {
alert("Invalid Password")
}
} else {
alert("Invalid UserID")
}
}
//-->
</script>
Nada puede vencer a este IMHO.
¿Qué tal un administrador de documentos en línea, que permitió establecer todos los permisos de seguridad que podría recordar ...
Eso es hasta que llegaste a la página de descarga ... download.aspx? DocumentId = 12345
Sí, documentId era el ID de la base de datos (incremento automático) y usted podría hacer un bucle con cada número y cualquiera podría obtener todos los documentos de la compañía.
Cuando se alertó sobre este problema, la respuesta del gerente del proyecto fue: Ok, gracias. Pero nadie ha notado esto antes, así que mantengámoslo como está.
"Pedo mellon a minno" , "Habla amigo y entra", en las puertas de Moria.
Microsoft Bob
(Crédito: Abandonware del siglo XX de Dan )
Si ingresa su contraseña de forma incorrecta por tercera vez, se le preguntará si ha olvidado su contraseña.
http://img132.yfrog.com/img132/8397/msbob10asignin15.gif
Pero en lugar de tener seguridad, como continuar pidiendo la contraseña correcta hasta que se ingrese o bloquearlo después de varios intentos incorrectos, puede ingresar cualquier contraseña nueva y reemplazará la original Cualquier persona puede hacer esto con una cuenta de Microsoft Bob "protegida" con contraseña.
No se requiere autenticación previa. sus medios User1 podría cambiar su propia contraseña simplemente escribiendo su contraseña de forma incorrecta tres veces y luego ingresando una nueva contraseña la cuarta vez, sin tener que usar "cambiar contraseña".
También significa que User1 podría cambiar las contraseñas de User2, User3 ... exactamente de la misma manera. Cualquier usuario puede cambiar la contraseña de cualquier otro usuario simplemente escribiendo la contraseña tres veces y luego ingresando una nueva contraseña cuando se le solicite, y luego podrá acceder a la cuenta.
El agujero de seguridad menos perdonable, y desafortunadamente uno muy común y fácil de encontrar, es el pirateo de Google . Caso en punto:
Es sorprendente la cantidad de páginas en Internet, en particular los sitios gubernamentales, que pasan una consulta SQL a través de la cadena de consulta. Es la peor forma de inyección SQL y no requiere ningún esfuerzo para encontrar sitios vulnerables.
Con pequeños ajustes, he podido encontrar instalaciones no protegidas de phpMyAdmin, instalaciones no protegidas de MySQL, cadenas de consulta que contienen nombres de usuario y contraseñas, etc.
Uno de los más simples, pero que realmente vale la pena el costo es:
Los sistemas de pago que utilizan motores como PayPal pueden ser defectuosos porque la respuesta de PayPal después de que el pago se realizó correctamente no se verifica como debería.
Por ejemplo:
Puedo ir a un sitio web de compra de CD y agregar contenido al carrito, luego, durante las etapas de pago, generalmente hay un formulario en la página que se ha llenado con campos para PayPal y un botón de envío para "Pagar"
Con un editor de DOM Puedo entrar en la forma "en vivo" y cambie el valor de £899.00
a £0.01
y luego haga clic en enviar ...
Cuando estoy en el lado de PayPal, veo que la cantidad es de 1 centavo, así que pago eso y PayPal redirige algunos parámetros al sitio de compra inicial, quien solo valida parámetros como payment_status=1
, etc., etc. y no Validar el importe pagado.
Esto puede ser costoso si no tienen suficiente registro en el lugar o los productos se envían automáticamente.
El peor tipo de sitios son los sitios que entregan aplicaciones, software, música, etc.
Voy a compartir uno que he creado. Mas o menos.
Años y años y años atrás, la compañía para la que trabajaba buscaba indexación en su sitio web ASP. Así que fui y configuré Index Server, excluí algunos directorios de administración y todo fue bueno.
Sin embargo, para mi desconocida, alguien le había dado a una persona de ventas acceso al servidor web para que pudiera trabajar desde casa, estos eran los días de acceso telefónico y era la forma más fácil para él de intercambiar archivos ... y comenzó a cargar cosas. incluyendo documentos que detallan el marcado en nuestros servicios ... qué índice indexó el servidor y cómo comenzar a servir cuando las personas buscaron "Costos".
Recuerde a los niños, listas blancas no listas negras.
Una entrega de pizza noruega tenía un agujero de seguridad en el que podía pedir cantidades negativas de pizzas en su nuevo y brillante portal de internet y obtenerlas gratis.