CVE-2026-11521
Executive Summary
CVE-2026-11521 is a critical improper authorization vulnerability in the TransactionController.java file of the bank-management-system-springboot project by Mohammed-eid35. The vulnerability allows an unauthenticated remote attacker to bypass authorization checks on transaction endpoints, potentially enabling unauthorized fund transfers, balance manipulation, or data exfiltration. The project uses a rolling release model, and the maintainer has not responded to the issue report. A public proof-of-concept (PoC) exists, increasing the risk of exploitation. The CVSS score is 6.3 (Medium), but the lack of authentication requirements and public exploit availability elevate the real-world risk.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This is a Java/Spring Boot application, not a package manager-based project (NPM, PyPI, Go, Ruby). No supply chain package security concerns apply.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
- Base Score: 6.3 (Medium)
- Attack Vector: Network (AV:N) – exploitable remotely.
- Attack Complexity: Low (AC:L) – no special conditions required.
- Privileges Required: None (PR:N) – no authentication needed.
- User Interaction: None (UI:N) – no user action required.
- Scope: Unchanged (S:U) – impact confined to the vulnerable component.
- Confidentiality Impact: Low (C:L) – limited data exposure.
- Integrity Impact: Low (I:L) – limited modification of data.
- Availability Impact: Low (A:L) – limited service disruption.
Threat Level: High (due to public exploit and no patch).
Deep Dive & Mechanics
The vulnerability resides in the TransactionController.java file, specifically in the transaction endpoint. The controller likely handles HTTP requests for operations like fund transfers, balance inquiries, or transaction history. The flaw is an improper authorization check (CWE-285), meaning the endpoint does not verify whether the requesting user has the right to perform the action. This could be due to:
- Missing
@PreAuthorizeor@Securedannotations. - Lack of session validation or token verification.
- Incorrect role/permission checks in the method logic.
An attacker can craft a direct HTTP request to the vulnerable endpoint (e.g., POST /api/transactions/transfer) with arbitrary parameters (e.g., fromAccount, toAccount, amount) without providing valid credentials or session tokens. The server processes the request as if it were authorized, leading to unauthorized transactions.
The project uses a rolling release model, meaning there are no versioned releases. The vulnerable commit is 7b9bcc65ad7df3db29af71aed9bb500e5f24d948. The maintainer has been notified via an issue report but has not responded.
Vulnerable vs. Patched Code
Vulnerable Code (TransactionController.java):
@RestController
@RequestMapping("/api/transactions")
public class TransactionController {
@PostMapping("/transfer")
public ResponseEntity<?> transfer(@RequestBody TransferRequest request) {
// Missing authorization check
transactionService.transfer(request.getFromAccount(), request.getToAccount(), request.getAmount());
return ResponseEntity.ok("Transfer successful");
}
}
Patched Code (Hypothetical fix):
@RestController
@RequestMapping("/api/transactions")
public class TransactionController {
@PostMapping("/transfer")
@PreAuthorize("hasRole('USER') and #request.fromAccount == authentication.name")
public ResponseEntity<?> transfer(@RequestBody TransferRequest request) {
transactionService.transfer(request.getFromAccount(), request.getToAccount(), request.getAmount());
return ResponseEntity.ok("Transfer successful");
}
}
The patched version adds @PreAuthorize to ensure the user is authenticated and owns the source account.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A running instance of the vulnerable application (e.g., on
http://target:8080). - No authentication required.
Exploit Steps:
- Identify the vulnerable endpoint (e.g.,
POST /api/transactions/transfer). - Craft a malicious request with arbitrary account numbers and amounts.
- Send the request using
curlor a script.
Example Exploit (curl):
curl -X POST http://target:8080/api/transactions/transfer \
-H "Content-Type: application/json" \
-d '{"fromAccount":"123456","toAccount":"654321","amount":1000.00}'
Expected Result: The server responds with "Transfer successful" even though the attacker is not authenticated.
Blue Team
Detection:
- Monitor for POST requests to
/api/transactions/transferwithout valid session tokens. - Look for multiple transfer requests from the same IP to different accounts.
- Alert on transactions where
fromAccountdoes not match any known user.
Mitigation:
- Implement authentication and authorization checks immediately.
- Apply input validation and rate limiting.
- Use a Web Application Firewall (WAF) to block suspicious patterns.
Indicators of Compromise (IOCs)
Network IOCs:
- HTTP POST requests to
/api/transactions/transferwithoutAuthorizationheader. - Requests with JSON body containing
fromAccount,toAccount,amountfields. - Unusual transaction amounts or rapid succession of transfers.
- HTTP POST requests to
File IOCs:
- Log entries showing
Transfer successfulfor unauthenticated requests. - Absence of user ID or session ID in transaction logs.
- Log entries showing
Behavioral IOCs:
- Multiple failed login attempts followed by successful transfers (if authentication exists elsewhere).
- Transfers from accounts that are not associated with the requesting IP.
Detection Engineering
YARA Rule
rule CVE_2026_11521_TransactionController {
meta:
description = "Detects vulnerable TransactionController.java with missing authorization"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2026-11521"
strings:
$s1 = "TransactionController" nocase
$s2 = "transfer" nocase
$s3 = "@PostMapping" nocase
$s4 = "@PreAuthorize" nocase
condition:
all of ($s1, $s2, $s3) and not $s4
}
Sigma Rule
title: CVE-2026-11521 - Unauthorized Transaction Request
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects HTTP POST requests to the vulnerable transaction endpoint without authentication
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: POST
cs-uri-stem: '/api/transactions/transfer'
cs-uri-query: '*'
condition: selection
falsepositives:
- Legitimate authenticated users (if authentication is implemented elsewhere)
level: high
Suricata Rule
alert http any any -> any any (msg:"CVE-2026-11521 - Unauthorized Transaction Attempt"; flow:to_server; content:"POST"; http_method; content:"/api/transactions/transfer"; http_uri; content:"fromAccount"; http_client_body; content:"toAccount"; http_client_body; content:"amount"; http_client_body; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the vulnerable endpoint if possible, or restrict access via firewall rules.
- Implement authentication (e.g., JWT, session tokens) for all transaction endpoints.
- Add authorization checks using Spring Security annotations (
@PreAuthorize,@Secured). - Apply input validation to ensure
fromAccountbelongs to the authenticated user.
Long-term Fix:
- Fork the repository and apply the patch (see Vulnerable vs. Patched Code section).
- Monitor the official repository for updates or consider migrating to a maintained alternative.
Workaround:
- Use a reverse proxy (e.g., Nginx) to block requests to
/api/transactions/transferunless they contain a valid token.
Valters IT