Automated static analysis, commonly referred to as Static Application Security Testing (SAST), can find some instances of this weakness by analyzing source code (or binary/compiled code) without having to execute it. Typically, this is done by building a model of data flow and control flow, then searching for potentially-vulnerable patterns that connect "sources" (origins of input) with "sinks" (destinations where the data interacts with external components, a lower layer such as the OS, etc.)
Declaration of Throws for Generic Exception
This vulnerability occurs when a method is declared to throw an overly broad exception type, such as a generic 'Exception' or 'Throwable'. This practice masks the specific error conditions that can…
What is CWE-397?
Real-world CVEs caused by CWE-397
Todavía no hay CVEs públicos enlazados a esta CWE en el catálogo de MITRE.
Ruta del atacante paso a paso
- 1
The following method throws three types of exceptions.
- 2
While it might seem tidier to write
- 3
doing so hampers the caller's ability to understand and handle the exceptions that occur. Further, if a later revision of doExchange() introduces a new type of exception that should be treated differently than previous exceptions, there is no easy way to enforce this requirement.
- 4
Early versions of C++ (C++98, C++03, C++11) included a feature known as Dynamic Exception Specification. This allowed functions to declare what type of exceptions it may throw. It is possible to declare a general class of exception to cover any derived exceptions that may be thrown.
- 5
In the example above, the code declares that myfunction() can throw an exception of type "std::exception" thus hiding details about the possible derived exceptions that could potentially be thrown.
Vulnerable Java
While it might seem tidier to write
public void doExchange() throws Exception {
...
} Secure Java
The following method throws three types of exceptions.
public void doExchange() throws IOException, InvocationTargetException, SQLException {
...
} How to prevent CWE-397
- Architecture Use safe-by-default frameworks and APIs that prevent the unsafe pattern from being expressible.
- Implementation Validate input at trust boundaries; use allowlists, not denylists.
- Implementation Apply the principle of least privilege to credentials, file paths, and runtime permissions.
- Testing Cover this weakness in CI: SAST rules + targeted unit tests for the data flow.
- Operation Monitor logs for the runtime signals listed in the next section.
How to detect CWE-397
Plexicus detecta automáticamente CWE-397 y abre un PR de corrección en menos de 60 segundos.
Codex Remedium escanea cada commit, identifica esta debilidad concreta y entrega un pull request listo para revisión con el parche. Sin tickets. Sin traspasos.
Frequently asked questions
¿Qué es CWE-397?
This vulnerability occurs when a method is declared to throw an overly broad exception type, such as a generic 'Exception' or 'Throwable'. This practice masks the specific error conditions that can occur, making it difficult for calling code to handle failures appropriately.
¿Qué gravedad tiene CWE-397?
MITRE no ha publicado una calificación de probabilidad de explotación para esta debilidad. Trátala como de impacto medio hasta que tu modelo de amenazas demuestre lo contrario.
¿Qué lenguajes o plataformas se ven afectados por CWE-397?
MITRE lists the following affected platforms: C++, C#, Java, Python.
¿Cómo puedo prevenir CWE-397?
Use safe-by-default frameworks, validate untrusted input at trust boundaries, and apply the principle of least privilege. Cover the data-flow signature in CI with SAST.
¿Cómo detecta y corrige Plexicus CWE-397?
El motor SAST de Plexicus detecta la firma de flujo de datos para CWE-397 en cada commit. Cuando hay coincidencia, nuestro agente Codex Remedium abre un PR de corrección con el código corregido, las pruebas y un resumen de una línea para el revisor.
¿Dónde puedo aprender más sobre CWE-397?
MITRE publica la definición canónica en https://cwe.mitre.org/data/definitions/397.html. También puedes consultar la documentación de OWASP y NIST para guías relacionadas.
Weaknesses related to CWE-397
Incorrect Control Flow Scoping
This vulnerability occurs when a program fails to return execution to the correct point in the code after finishing a specific operation…
Uncaught Exception
This vulnerability occurs when a function throws an error or exception, but the calling code does not have a proper handler to catch and…
J2EE Bad Practices: Use of System.exit()
This vulnerability occurs when a J2EE application directly calls System.exit(), which forcibly terminates the entire application server…
Use of NullPointerException Catch to Detect NULL Pointer Dereference
Using a try-catch block for NullPointerException as a substitute for proper null checks is an anti-pattern. This approach masks the root…
Declaration of Catch for Generic Exception
This weakness occurs when code catches a generic exception type like 'Exception' or 'Throwable', which can hide specific errors and create…
Non-exit on Failed Initialization
This vulnerability occurs when software continues to run as normal after encountering a critical security failure during its startup…
Return Inside Finally Block
This vulnerability occurs when a function places a return statement inside a finally block. This dangerous pattern silently discards any…
Execution After Redirect (EAR)
Execution After Redirect (EAR) occurs when a web application sends a redirect response to a user's browser but continues to run…
Further reading
- MITRE — CWE-397 oficial https://cwe.mitre.org/data/definitions/397.html
- Seven Pernicious Kingdoms: A Taxonomy of Software Security Errors https://samate.nist.gov/SSATTM_Content/papers/Seven%20Pernicious%20Kingdoms%20-%20Taxonomy%20of%20Sw%20Security%20Errors%20-%20Tsipenyuk%20-%20Chess%20-%20McGraw.pdf
- Automated Source Code Reliability Measure (ASCRM) http://www.omg.org/spec/ASCRM/1.0/
- Automated Source Code Security Measure (ASCSM) http://www.omg.org/spec/ASCSM/1.0/
Deja de pagar por desarrollador.
Empieza a cerrar el bucle.
Plexicus es el ASPM nativo de IA que escanea, filtra, corrige, pentestea y explica — de forma autónoma. Desarrolladores ilimitados, repos ilimitados, acciones de IA de uso justo. Nivel gratuito real, €269/mo anual cuando estés listo.