All AEM 6.5 LTS skills: Workflow model design, development, triggering, launchers, debugging, and triaging; Dispatcher config authoring, advisory, incident response, performance tuning, and security hardening; Replication agent configuration, content activation, API usage, and troubleshooting for AEM 6.5 LTS and AMS environments; Jackrabbit Oak query/index tuning (property, Lucene index definitions); and extracting/inventorying JCR queries (XPath, SQL2, QueryBuilder) across a codebase.
79%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Dispatcher Controls:
Audit Checks:
/crx/*, /system/*)/bin/querybuilder*)MCP Validation:
trace_request({"url":"/crx/de/index.jsp","method":"GET"}) # Should deny
trace_request({"url":"/content/site/en.html","method":"POST"}) # Should deny (read-only)
trace_request({"url":"/bin/querybuilder.json","method":"GET"}) # Should denySeverity if Failed: Critical
Dispatcher Controls:
Audit Checks:
MCP Validation:
# Check HTTPS config statically (vhost content)
validate({"config":"<vhost.conf content>","type":"httpd"})
lint({"mode":"directory","target":"/path/to/dispatcher/src","strict_mode":true})
# MCP does not directly return live response headers.
# Verify HSTS via config presence and, when available, external HTTP probe:
# curl -sI https://site.com/content/site/en.html | grep Strict-Transport-SecuritySeverity if Failed: High to Critical
Dispatcher Controls:
Audit Checks:
../* patterns)MCP Validation:
trace_request({"url":"/content/site/../../../etc/passwd","method":"GET"}) # Should deny/400
trace_request({"url":"/content/site/en.html?query=<script>","method":"GET"}) # Should sanitize
trace_request({"url":"/content/site/en.json;.css","method":"GET"}) # Should handle safelySeverity if Failed: High
Dispatcher Controls:
Audit Checks:
MCP Validation:
lint({"mode":"directory","target":"/path/to/dispatcher/src","strict_mode":true})
sdk({"action":"check-files","config_path":"/path/to/dispatcher/src"})
validate({"config":"<dispatcher.any content>","type":"ams"})Severity if Failed: Medium
Dispatcher Controls:
Audit Checks:
MCP Validation:
lint({"mode":"directory","target":"/path/to/dispatcher/src","strict_mode":true})
validate({"config":"<httpd/vhost header config content>","type":"httpd"})
inspect_cache({"url":"/content/site/en.html","show_metadata":true})
# For live header proof, use external HTTP probe in environment:
# curl -sI https://site.com/content/site/en.htmlSeverity if Failed: Medium to High
Dispatcher Controls:
Audit Checks:
MCP Validation:
# Check dispatcher version
# Verify against: https://experienceleague.adobe.com/en/docs/experience-manager-dispatcher/using/getting-started/release-notesSeverity if Failed: High (if CVEs present)
Dispatcher Controls:
Audit Checks:
MCP Validation:
trace_request({"url":"/system/console","method":"GET"}) # Should deny before reaching AEM
tail_logs({"lines":1000})
# Review returned entries for sensitive tokens/password patterns.Severity if Failed: Critical (if bypass possible)
Dispatcher Controls:
Audit Checks:
MCP Validation:
sdk({"action":"diff-baseline","config_path":"/path/to/dispatcher/src"})
sdk({"action":"check-files","config_path":"/path/to/dispatcher/src"})Severity if Failed: Medium
Dispatcher Controls:
Audit Checks:
MCP Validation:
tail_logs({"lines":100})
monitor_metrics({"window_minutes":60,"breakdown_by":"status_code"})Severity if Failed: Low to Medium
Dispatcher Controls:
Audit Checks:
MCP Validation:
trace_request({"url":"/content/site/proxy?url=http://<loopback-target>","method":"GET"}) # Should deny
trace_request({"url":"/content/site/proxy?url=http://<metadata-service-address>","method":"GET"}) # Should denySeverity if Failed: High
| Requirement | Dispatcher Control | Check |
|---|---|---|
| 2.2 | Strong crypto (TLS 1.2+) | SSL config audit |
| 6.5.3 | No sensitive data in logs | Log content review |
| 6.6 | Web application firewall | Filter rules audit |
| 8.2.1 | Multi-factor auth | Pass-through to AEM |
| Control | Dispatcher Mapping | Check |
|---|---|---|
| 2.1 | Run as dedicated user | Process ownership |
| 3.1 | Disable directory listing | Options -Indexes |
| 4.1 | Remove unnecessary modules | LoadModule audit |
| 5.1 | Configure TLS 1.2+ minimum | SSLProtocol config |
| 7.1 | Set ServerTokens to Prod | ServerTokens audit |
| Function | Dispatcher Control | Implementation |
|---|---|---|
| Identify | Asset inventory | Config management |
| Protect | Access controls | Filter rules |
| Detect | Logging/monitoring | Access logs, metrics |
| Respond | Incident handling | Log analysis |
| Recover | Backup/restore | Config version control |
## OWASP A01:2021 - Broken Access Control
**Severity:** Critical
**Status:** Failed
**Finding:**
Admin console accessible without authentication via `/crx/de/index.jsp`.
**Evidence:**
```text
trace_request({"url":"/crx/de/index.jsp","method":"GET"})
status: passed/allowedImpact:
Recommendation: Add deny rule for admin paths with highest priority. Place the deny after any allow that matches the path (last-applied filter wins).
/filter {
/0000 { /glob "*" /type "deny" }
/0001 { /glob "/crx/*" /type "deny" }
/0002 { /glob "/system/*" /type "deny" }
# ... other allows ...
}Verification:
trace_request({"url":"/crx/de/index.jsp","method":"GET"})
# Expected: filter stage status = deniedReferences:
---
## Automated OWASP Check Pattern
```text
Use your automation runner to execute MCP calls and score checks:
1) access = trace_request({"url":"/crx/de/index.jsp","method":"GET"})
2) traversal = trace_request({"url":"/content/../../../etc/passwd","method":"GET"})
3) static_check = lint({"mode":"directory","target":"/path/to/dispatcher/src","strict_mode":true})
4) integrity = sdk({"action":"check-files","config_path":"/path/to/dispatcher/src"})
5) drift = sdk({"action":"diff-baseline","config_path":"/path/to/dispatcher/src"})
Then score pass/fail using returned stage statuses and issue severities.
For live response-header checks (HSTS/CSP/etc), add external HTTP probes in the same pipeline..tessl-plugin
skills
aem-replication
aem-workflow
dispatcher
ensure-agents-md
references
tuning-oak-query-indexes