Description
In many cases, an attacker can leverage the conditions that cause unhandled exception errors in order to gain unauthorized access to the system.
Potential Impact
Confidentiality
Read Application Data
Demonstrative Examples
public class InputFileRead {
private File readFile = null;private FileReader reader = null;private String inputFilePath = null;private final String DEFAULT_FILE_PATH = "c:\\somedirectory\\";
public InputFileRead() {inputFilePath = DEFAULT_FILE_PATH;}
public void setInputFile(String inputFile) {
/* Assume appropriate validation / encoding is used and privileges / permissions are preserved */
}
public void readInputFile() {
try {reader = new FileReader(readFile);...} catch (RuntimeException rex) {System.err.println("Error: Cannot open input file in the directory " + inputFilePath);System.err.println("Input file has not been set, call setInputFile method before calling readInputFile");
} catch (FileNotFoundException ex) {...}
}
}public class BankManagerLoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// Get username and password from login page request
String username = request.getParameter("username");String password = request.getParameter("password");
// Authenticate user
BankManager bankMgr = new BankManager();boolean isAuthentic = bankMgr.authenticateUser(username, password);
// If user is authenticated then go to successful login page
if (isAuthentic) {request.setAttribute("login", new String("Login Successful."));getServletContext().getRequestDispatcher("/BankManagerServiceLoggedIn.jsp"). forward(request, response);}else {
// Otherwise, raise failed login exception and output unsuccessful login message to error page
throw new FailedLoginException("Failed Login for user " + username + " with password " + password);
}
} catch (FailedLoginException ex) {
// output failed login message to error page
request.setAttribute("error", new String("Login Error"));request.setAttribute("message", ex.getMessage());getServletContext().getRequestDispatcher("/ErrorPage.jsp").forward(request, response);
}
}Mitigations & Prevention
Do not expose sensitive error information to the user.
Related Weaknesses
Frequently Asked Questions
What is CWE-537?
CWE-537 (Java Runtime Error Message Containing Sensitive Information) is a software weakness identified by MITRE's Common Weakness Enumeration. It is classified as a Variant-level weakness. In many cases, an attacker can leverage the conditions that cause unhandled exception errors in order to gain unauthorized access to the system.
How can CWE-537 be exploited?
Attackers can exploit CWE-537 (Java Runtime Error Message Containing Sensitive Information) to read application data. This weakness is typically introduced during the Implementation phase of software development.
How do I prevent CWE-537?
Key mitigations include: Do not expose sensitive error information to the user.
What is the severity of CWE-537?
CWE-537 is classified as a Variant-level weakness (Low-Medium abstraction). Its actual severity depends on the specific context and how the weakness manifests in your application.