aem_cloudsettings_injection

package
v0.5.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package aem_cloudsettings_injection detects the AEM cloud-settings pre-auth write chain (CVE-2025-54246) and the Expression Language injection it enables (CVE-2025-54247 / CVE-2025-54248). Both are confirmed strictly in-band: a probe value is written through the BulkImportConfigServlet and read back through the ConfDeliveryServlet, so no out-of-band infrastructure is needed. The writes are benign (a random marker property, and a 7*7 arithmetic probe) — no script execution beyond harmless EL arithmetic is ever performed.

Index

Constants

View Source
const (
	ModuleID    = "aem-cloudsettings-injection"
	ModuleName  = "AEM Cloud Settings Pre-Auth Node Write / EL Injection"
	ModuleShort = "" /* 249-byte string literal not displayed */
)

Variables

View Source
var (
	ModuleDesc = `**What it means:** AEM's BulkImportConfigServlet writes request parameters into ` + "`/conf/global/settings/dam/import/cloudsettings`" + ` under a privileged account, and the ConfDeliveryServlet reads them back — also privileged. Together they give an unauthenticated arbitrary JCR-property write with a read-back channel (CVE-2025-54246). When the written ` + "`sling:resourceType`" + ` points at a JSP that evaluates a property as Expression Language, it becomes server-side EL injection (CVE-2025-54247/54248) that leaks OSGi secrets.

**How it's exploited:** POST ` + "`importSource=UrlBased&sling:resourceType=<jsp>&action=x#{7*7}y`" + `, then read the node back through the ConfDeliveryServlet; ` + "`x49y`" + ` proves the EL evaluated.

**Fix:** Apply the GRANITE-61551 hotfix and deny anonymous access to ` + "`/conf`" + ` and ` + "`/etc/cloudsettings`" + ` at the dispatcher.`

	ModuleConfirmation = "" /* 279-byte string literal not displayed */
	ModuleSeverity     = severity.Critical
	ModuleConfidence   = severity.Firm
	ModuleTags         = []string{"aem", "adobe", "injection", "el-injection", "rce", "acl", "cve", "cve2025", "cms", "moderate"}
)

Functions

This section is empty.

Types

type Module

type Module struct {
	modkit.BaseActiveModule
	// contains filtered or unexported fields
}

func New

func New() *Module

func (*Module) CanProcess

func (m *Module) CanProcess(ctx *httpmsg.HttpRequestResponse) bool

func (*Module) IncludesBaseCanProcess

func (m *Module) IncludesBaseCanProcess() bool

func (*Module) ScanPerHost

func (m *Module) ScanPerHost(
	ctx *httpmsg.HttpRequestResponse,
	httpClient *http.Requester,
	scanCtx *modkit.ScanContext,
) ([]*output.ResultEvent, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL