Qué es una API y la lista OWASP 2023
Cuando usted consulta su banco o paga con SINPE Móvil desde el celular, la pantalla casi nunca habla con una base de datos: habla con una API. En esta lección verá qué es, de dónde salió, por qué merece una lista de riesgos propia y qué palabras usará el curso.
Qué es una API
API viene de Application Programming Interface, en español "interfaz de programación de aplicaciones": un conjunto de reglas para que un programa le pida algo a otro. Una API web es un conjunto de rutas en un servidor que reciben peticiones HTTP y devuelven datos, casi siempre en JSON: recursos (pedidos, usuarios) y funciones (crear, modificar, borrar). Una petición típica:
GET /api/v1/pedidos/1042 HTTP/1.1
Host: api.ejemplo.cr
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.ejemplo.firma
Accept: application/jsonY la respuesta:
{
"id": 1042,
"cliente": "[email protected]",
"estado": "en_ruta",
"monto": 18500
}A diferencia de una web clásica, la API entrega datos crudos y la aplicación decide qué mostrar. Por eso quien ataca le habla directo, sin la aplicación oficial; los identificadores como 1042 invitan a probar 1043, y las versiones viejas, rutas de socios y rutas de prueba multiplican la superficie que hay que proteger.
Breve historia
| Año | Hito |
|---|---|
| 2000 | Roy Fielding describe el estilo REST en su tesis doctoral, base de casi todas las API web actuales. |
| 2001 | Nace OWASP, Open Web Application Security Project (desde 2023, Open Worldwide), comunidad abierta de seguridad de aplicaciones. |
| 2006 | JSON se publica como RFC 4627 y desplaza a XML. |
| 2011 | Aparece Swagger para describir una API en un archivo; en 2016 pasa a llamarse OpenAPI. |
| 2012 y 2015 | Se publican OAuth 2.0 (RFC 6749) y JWT (RFC 7519). |
| 2019 | OWASP publica la primera edición del API Security Top 10. |
| 2023 | Segunda edición, vigente al escribir este curso; agrega SSRF y el consumo inseguro de API. Si sale una nueva, revise el sitio de OWASP. |
Por qué importa
Por las API viajan datos personales, pagos y órdenes de negocio: una sola ruta mal protegida expone a todos los clientes. Las trabajan a diario quienes desarrollan, quienes revisan seguridad de aplicaciones antes de cada pase a producción, los analistas de SOC que leen las bitácoras de la puerta de enlace y los equipos de DevSecOps. Quien no entiende una API no distingue en una bitácora una consulta normal de alguien que recorre pedidos ajenos.
Dónde se usan
- Aplicaciones móviles: la app del banco consulta saldos.
- Sitios web modernos: la tienda carga el carrito sin recargar la página.
- Integraciones: pasarelas de pago y facturación electrónica.
- Nube y microservicios: servicios internos que se llaman entre sí.
- Dispositivos conectados: cámaras y medidores que reportan a un servidor.
La lista 2023
| Identificador | Riesgo | En pocas palabras |
|---|---|---|
| API1:2023 | Broken Object Level Authorization (BOLA) | Puede ver o tocar objetos ajenos cambiando un identificador |
| API2:2023 | Broken Authentication | La API no comprueba bien quién es usted |
| API3:2023 | Broken Object Property Level Authorization (BOPLA) | Ve o modifica campos que no le corresponden |
| API4:2023 | Unrestricted Resource Consumption | Nada limita cuántos recursos consume |
| API5:2023 | Broken Function Level Authorization (BFLA) | Un usuario común ejecuta funciones de administrador |
| API6:2023 | Unrestricted Access to Sensitive Business Flows | Un flujo de negocio se automatiza para abusar de él |
| API7:2023 | Server Side Request Forgery (SSRF) | La API visita una dirección que eligió quien ataca |
| API8:2023 | Security Misconfiguration | Errores detallados, CORS abierto, modo depuración |
| API9:2023 | Improper Inventory Management | Nadie sabe qué API y versiones están publicadas |
| API10:2023 | Unsafe Consumption of APIs | Se confía ciegamente en lo que devuelve un tercero |
Tres de los cinco primeros riesgos tratan de autorización (objeto, campo y función): es la falla más frecuente en API reales y por eso el curso empieza ahí.
Conceptos clave
| Concepto | Qué significa |
|---|---|
| Ruta o endpoint | Dirección concreta de la API, como /api/pedidos/1042 |
| Método HTTP | La acción: GET lee, POST crea, PATCH o PUT modifican, DELETE borra |
| Código de estado | 200 bien, 400 petición inválida, 401 sin identidad, 403 sin permiso, 404 no existe, 429 demasiadas peticiones |
| Autenticación | Comprobar quién es usted |
| Autorización | Decidir qué puede hacer usted, ya identificado |
| Token | Cadena que la API entrega al iniciar sesión y el cliente reenvía en cada petición, por ejemplo un JWT |
| Contrato OpenAPI | Archivo YAML o JSON que describe rutas, campos y requisitos de seguridad |
Cómo leer una sintaxis y pedir ayuda
En las fichas de herramientas, los corchetes indican algo opcional, las MAYÚSCULAS un valor que usted reemplaza y los tres puntos algo repetible: curl [OPCIONES] URL.... Para ver las opciones en su máquina use curl --help all o man curl; para una función de Python, help(nombre) dentro del intérprete.