Este taller pretende brindar a los alumnos las herramientas y habilidades necesarias para llevar a cabo auditorías de seguridad en aplicaciones web y al mismo tiempo enseñar buenas prácticas de programación con tal de prevenir la inclusión de vulnerabilidades en el desarrollo de una aplicación.
function loadQuantity(){
$.ajax({
type: "POST",
url: "/api/Quantity.jsp",
success: function(data) {
var quantity = parseInt(data, 10);
if (quantity > 0) {
$("#divQuantity").html(data + "products");
} else {
$("#divQuantity").html("Empty");
}
}
});
}
jQuery.html(htmlString): Set the HTML contents of each element in the set of matched elements.
Si data contiene código HTML o Javascript, este será interpretado por el navegador.
En este caso y en general, donde sólo se busca mostrar texto, es recomendado usar jQuery.text()
En el caso que los datos pasados a la petición AJAX retornen código HTML válido, se puede generar un escenario para explotar una vulnerabilidad en el lado del cliente.
parseInt(string, base): Parses a string argument and returns an integer of the specified radix or base.
> parseInt("8", 10);
8
> parseInt("8a", 10);
8
> parseInt("8<b>test</b>", 10);
8
function loadQuantity(){
$.ajax({
type: "POST",
url: "/api/Quantity.jsp",
success: function("8<b>test</b>") {
var quantity = parseInt("8<b>test</b>", 10);
if (quantity > 0) {
$("#divQuantity").html("8<b>test</b>" + "products");
} else {
$("#divQuantity").html("Empty");
}
}
});
}
function loadQuantity(){
$.ajax({
type: "POST",
url: "/api/Quantity.jsp",
success: function(data) {
var quantity = parseInt(data, 10);
if (quantity > 0) {
$("#divQuantity").text(quantity + "products");
} else {
$("#divQuantity").text("Empty");
}
}
});
}
Se pueden seguir todas las buenas prácticas en el desarrollo de una aplicación pero hay factores que escapan del alcance (vulnerabilidades en frameworks, binarios usados por la aplicación, etc.)
Aprovechamiento de comportamientos no documentados y fallas en la lógica de la aplicación suelen ser ataques más ingeniosos que las herramientas automatizadas no pueden encontrar.
En la comunidad han habido diversas discusiones sobre la necesidad de explotar una vulnerabilidad satisfactoriamente. Una vulnerabilidad, hoy de explotación compleja, puede ser explotada mañana gracias a cambios en el entorno. No hay motivos para no parchar.
La forma recomendada de notificar vulnerabilidades es mediante notificación responsable. Es importante tener en cuenta que la difusión irresponsable de una vulnerabilidad no sólo afecta al vendedor, sino también a los usuarios del software.
Desarrolladores son, en la mayoría de los casos, los responsables de las vulnerabilidades.
Generalmente, las empresas responsabilizan a los atacantes, siendo que ellos sólo explotan una vulnerabilidad introducida anteriormente. Este último comportamiento viene dado por la búsqueda fácil de un culpable y falta de cultura en seguridad. Como ingenieros formados en seguridad debemos cambiar esta situación.
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.