Owasp Ejemplos C#

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 6

A1:2017-Injection

Las fallas de inyección, como la inyección de SQL, NoSQL, OS y LDAP, ocurren


cuando se envían datos no confiables a un intérprete como parte de un comando
o consulta. Los datos hostiles del atacante pueden engañar al intérprete para
que ejecute comandos no intencionados o acceda a los datos sin la debida
autorización.

private static void UpdateDemographics(Int32 customerID,


string demoXml, string connectionString)
{
// Update the demographics for a store, which is stored
// in an xml column.
string commandText = "UPDATE Sales.Store SET Demographics =
@demographics "
+ "WHERE CustomerID = @ID;";

using (SqlConnection connection = new SqlConnection(connectionString))


{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;

// Use AddWithValue to assign Demographics.


// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml);

try
{
connection.Open();
Int32 rowsAffected = command.ExecuteNonQuery();
Console.WriteLine("RowsAffected: {0}", rowsAffected);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}

A2:2017-Broken Authentication
Las funciones de la aplicación relacionadas con la autenticación y la
administración de sesiones a menudo se implementan incorrectamente, lo que
permite a los atacantes comprometer contraseñas, claves o tokens de sesión, o
explotar otras fallas de implementación para asumir las identidades de otros
usuarios de forma temporal o permanente.
Practicar el uso de asp.net miembro de la nave y el proveedor de la función
ayudará a reducir los ataques.
Usar el proveedor de membresía de Asp.net y el proveedor de roles
<asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
<AnonymousTemplate>
[ <a href="~/Account/Login.aspx" id="HeadLoginStatus" runat="server">Log
In</a> ]
</AnonymousTemplate>
<LoggedInTemplate>
Welcome
<span class="bold">
<asp:LoginName ID="HeadLoginName" runat="server" />
</span>
! [ <asp:LoginStatus ID="HeadLoginStatus" runat="server"
LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/" /> ]
</LoggedInTemplate>
</asp:LoginView>

A3:2017-Sensitive Data Exposure


Muchas aplicaciones web y API no protegen adecuadamente los datos
confidenciales, como finanzas, atención médica y PII. Los atacantes pueden
robar o modificar dichos datos protegidos de forma deficiente para cometer
fraude con tarjetas de crédito, robo de identidad u otros delitos. Los datos
confidenciales pueden verse comprometidos sin protección adicional, como el
cifrado en reposo o en tránsito, y requieren precauciones especiales cuando se
intercambian con el navegador.
protected void Foo(object o)
{
string strData = "Data" + o.ToString() ;
lblData.Text = strData;
}

cambiar a:
protected void Foo(object o)
{
string strData = "Data" + o.ToString() ;
validateStrData(strData);
lblData.Text = strData;
}
private void validateStrData(string strData)
{
//some validating logic
}
A4:2017-XML External Entities (XXE)
Muchos procesadores XML antiguos o mal configurados evalúan referencias de
entidades externas dentro de documentos XML. Se pueden usar entidades
externas para divulgar archivos internos mediante el controlador de URI de
archivos, recursos compartidos de archivos internos, escaneo de puertos
internos, ejecución remota de código y ataques de denegación de servicio.

class CustomUrlResovler : XmlUrlResolver


{
public override Uri ResolveUri(Uri baseUri, string relativeUri)
{
Uri uri = new Uri(baseUri, relativeUri);
if (IsUnsafeHost(uri.Host))
return null;
return base.ResolveUri(baseUri, relativeUri);
}
private bool IsUnsafeHost(string host)
{
return false;
}
}

A5:2017-Broken Access Control


Las restricciones sobre lo que los usuarios autenticados pueden hacer a menudo
no se aplican correctamente. Los atacantes pueden explotar estas fallas para
acceder a funcionalidades y / o datos no autorizados, como acceder a las
cuentas de otros usuarios, ver archivos confidenciales, modificar datos de otros
usuarios, cambiar derechos de acceso, etc.
www.misitio.com/orders/orderid=900 ¿qué pasaría si cambiamos esa orden en
1? ¿Qué sucede si un usuario intentó acceder a
www.misitio.com/orders/orderid=901?

[HttpGet("order/{id}")]
[Authorize]
public IActionResult GetOrder(int id)
{
Order order = _orderRepository.GetById(id);
return Ok(order);
}

Lo modificamos a:

[HttpGet("order/{id}")]
[Authorize]
public IActionResult GetOrder(int id)
{
var loggedInUser = HttpContext.User;
var customerId = loggedInUser.Claims.FirstOrDefault(x => x.Type ==
ClaimTypes.NameIdentifier).Value;

Order order = _orderRepository.GetById(id);


if(order.CustomerId != customerId)
{
return Unauthorized();
}

return Ok(order);
}

A6:2017-Security Misconfiguration
La mala configuración de la seguridad es el problema más común. Esto suele
ser el resultado de configuraciones predeterminadas inseguras,
configuraciones incompletas o ad hoc, almacenamiento en la nube abierta,
encabezados HTTP mal configurados y mensajes de error detallados que
contienen información confidencial. No solo todos los sistemas operativos,
marcos, bibliotecas y aplicaciones deben estar configurados de manera segura,
sino que deben parcharse / actualizarse de manera oportuna.

Configurar iss y el deploy en release (no usar debug)


A7:2017-Cross-Site Scripting (XSS)
Las fallas de XSS ocurren cuando una aplicación incluye datos no confiables
en una nueva página web sin la validación o escape adecuados, o actualiza
una página web existente con datos proporcionados por el usuario mediante
una API del navegador que puede crear HTML o JavaScript. XSS permite a los
atacantes ejecutar scripts en el navegador de la víctima, que pueden
secuestrar sesiones de usuario, desfigurar sitios web o redirigir al usuario a
sitios maliciosos.
Importar la librería a tu Proyecto “Microsoft Anti-XSS Library” y emplear:
Microsoft.Security.Application.LowerCodeCharts,
Microsoft.Security.Application.LowerMidCodeCharts,
Microsoft.Security.Application.MidCodeCharts,
Microsoft.Security.Application.UpperMidCodeCharts and
Microsoft.Security.Application.UpperCodeCharts enumerations

A8:2017-Insecure Deserialization
La deserialización insegura a menudo conduce a la ejecución remota de
código. Incluso si las fallas de deserialización no dan como resultado la
ejecución remota de código, se pueden usar para realizar ataques, incluidos
ataques de repetición, ataques de inyección y ataques de escalada de
privilegios.
Se está utilizando JSON.Net, asegúrese de que TypeNameHandling solo esté
establecido en Ninguno.
TypeNameHandling = TypeNameHandling.None
O emplear
using the DataContractSerializer or XmlSerializer siempre que sea posible

A9:2017-Using Components with Known Vulnerabilities


Los componentes, como bibliotecas, marcos y otros módulos de software, se
ejecutan con los mismos privilegios que la aplicación. Si se explota un
componente vulnerable, tal ataque puede facilitar la pérdida grave de datos o la
toma de control del servidor. Las aplicaciones y las API que utilizan
componentes con vulnerabilidades conocidas pueden socavar las defensas de
las aplicaciones y permitir varios ataques e impactos.
Emplear las librerias mas actualizadas y estables en nuestro Proyecto por
ejemplo:
https://sourceforge.net/projects/csjson/ versión 10.1

A10:2017-Insufficient Logging&Monitoring
El registro y monitoreo insuficientes, junto con la integración faltante o ineficaz
con la respuesta a incidentes, permite a los atacantes atacar aún más los
sistemas, mantener la persistencia, girar a más sistemas y manipular, extraer o
destruir datos. La mayoría de los estudios de incumplimiento muestran que el
tiempo para detectar un incumplimiento es de más de 200 días, generalmente
detectado por partes externas en lugar de procesos internos o monitoreo.
1. Abra el Visor de eventos (Herramientas administrativas -> Visor de eventos)
2. Expandir los "Registros de aplicación y servicio"
3. Expanda "Microsoft", y expanda "Windows"
4. Expanda "Configuración de IIS", haga clic con el botón derecho en
"Operativo" y seleccione "Activar registro"

O tambien
wevtutil sl Microsoft-IIS-Configuration/Operational /e:true

También podría gustarte