CVE-2026-44308

Signature Forgery
Affects
Spring Cloud AWS
in
Spring
No items found.
Versions
>=2.2.0 <=2.2.8, >=3.0.0 <4.0.2

Patch Available.

Exclamation circle icon
Patch Available

This Vulnerability has been fixed in the Never-Ending Support (NES) version offered by HeroDevs.

Overview

Spring Cloud AWS simplifies using AWS managed services such as SNS, SQS, S3 and Parameter Store in Spring and Spring Boot applications. Its SNS module lets a Spring MVC controller act as an HTTP/HTTPS endpoint for an SNS topic, receiving notifications and handling subscription and unsubscription confirmations.

A signature forgery vulnerability (CVE-2026-44308) has been identified in the Spring Cloud AWS SNS HTTP/HTTPS endpoint support, which allows attackers to send forged SNS messages that the application accepts as genuine. An unauthenticated attacker who knows the endpoint URL can make the application process arbitrary payloads as SNS notifications, or confirm subscriptions to, or unsubscribe from, topics the attacker controls.

Per OWASP: Software and data integrity failures relate to code and infrastructure that does not protect against integrity violations.

This issue affects multiple versions of Spring Cloud AWS.

Details

Module Info

Vulnerability Info

This Medium-severity vulnerability is found in the io.awspring.cloud:spring-cloud-aws-sns package in multiple versions of Spring Cloud AWS. Affected 2.2.x versions of Spring Cloud AWS carry the same SNS endpoint support, without signature verification, in the org.springframework.cloud:spring-cloud-aws-messaging package. Controllers that use @NotificationMessageMapping, @NotificationSubscriptionMapping or @NotificationUnsubscribeConfirmationMapping receive SNS messages as plain HTTP POST requests. Amazon SNS signs every message it delivers, and a receiver is expected to check that signature against the AWS signing certificate before it trusts the message. Affected versions of Spring Cloud AWS do not perform that check.

AbstractNotificationMessageHandlerMethodArgumentResolver.resolveArgument reads the request body into a JsonNode and passes it straight to the concrete resolver. The resolver for @NotificationMessage parameters only checks the Type field and then converts the attacker-supplied Message field into the handler's parameter:

protected Object doResolveArgumentFromNotificationMessage(JsonNode content, HttpInputMessage request,
		Class<?> parameterType) {
	if (!"Notification".equals(content.get("Type").asString())) {
		throw new IllegalArgumentException(
				"@NotificationMessage annotated parameters are only allowed for method that receive a notification message.");
	}

	MediaType mediaType = getMediaType(content);
	String messageContent = content.findPath("Message").asString();
	for (HttpMessageConverter<?> converter : this.messageConverter) {
		if (converter.canRead(parameterType, mediaType)) {
			try {
				return converter.read((Class) parameterType,
						new ByteArrayHttpInputMessage(messageContent, mediaType, request));
			}
			catch (Exception e) {
				throw new HttpMessageNotReadableException(
						"Error converting notification message with payload:" + messageContent, e, request);
			}
		}
	}
	...
}

The resolver for NotificationStatus parameters does the same for subscription traffic. It accepts any body whose Type is SubscriptionConfirmation or UnsubscribeConfirmation and builds a status object from the unverified TopicArn and Token fields:

protected Object doResolveArgumentFromNotificationMessage(JsonNode content, HttpInputMessage request,
		Class<?> parameterType) {
	if (!"SubscriptionConfirmation".equals(content.get("Type").asString())
			&& !"UnsubscribeConfirmation".equals(content.get("Type").asString())) {
		throw new IllegalArgumentException(
				"NotificationStatus is only available for subscription and unsubscription requests");
	}
	return new AmazonSnsNotificationStatus(this.snsClient, content.get("TopicArn").asString(),
			content.get("Token").asString());
}

When the handler calls notificationStatus.confirmSubscription(), the application calls the SNS ConfirmSubscription API with the attacker's topic ARN and token using its own AWS credentials. Because the Signature, SigningCertURL and SignatureVersion fields are ignored, an attacker who can reach the endpoint can forge notifications that run through the application's business logic, or drive the application to confirm a subscription to a topic the attacker controls.

Mitigation

Only recent versions of Spring Cloud AWS receive community support. Older lines are End-of-Life and will not receive public updates to address this issue.

Users of the affected components should apply one of the following mitigations:

  • Upgrade to a currently supported version of Spring Cloud AWS.
  • Leverage a commercial support partner like HeroDevs for post-EOL security support.
Vulnerability Details
Severity
Level
CVSS Assessment
Low
>=0 <4
Medium
>=4 <6
High
>=6 <8
Critical
>=8 <10
Medium
ID
CVE-2026-44308
PROJECT Affected
Spring Cloud AWS
Versions Affected
>=2.2.0 <=2.2.8, >=3.0.0 <4.0.2
NES Versions Affected
Published date
November 7, 2026
≈ Fix date
November 6, 2026
Category
Signature Forgery
Vex Document
Download VEXHow do I use it?
Sign up for the latest vulnerability alerts fixed in
NES for Spring
Rss feed icon
Subscribe via RSS
or

By submitting the form I acknowledge receipt of our Privacy Policy.

Thanks for signing up for our Newsletter! We look forward to connecting with you.
Oops! Something went wrong while submitting the form.