Confluence
Adversaries may leverage Confluence repositories to mine valuable information. Often found in development environments alongside Atlassian JIRA, Confluence is generally used to store development-related documentation but may contain diverse categories of sensitive information including: policies and procedures, physical/logical network diagrams, system architecture diagrams, technical system documentation, testing/development credentials, work/project schedules, source code snippets, and links to internal resources. LAPSUS$ is documented to have specifically searched victim Confluence and JIRA instances to discover high-privilege account credentials as part of their data theft operations, making this a high-value target during the collection phase of an intrusion.
let BulkAccessThreshold = 40;
let SensitiveSearchTerms = dynamic([
"password", "passwd", "credential", "secret", "api key", "apikey",
"token", "vpn", "ssh", "private key", "aws", "azure", "gcp",
"database password", "db pass", "connection string", "bearer",
"service account", "ldap", "kerberos", "access key"
]);
// Detect bulk Confluence access and credential hunting via Microsoft Defender for Cloud Apps
CloudAppEvents
| where Timestamp > ago(24h)
| where AppName has_any ("Confluence", "Atlassian")
| where ActionType in~ (
"PageViewed", "ContentViewed", "SpaceViewed",
"AttachmentDownloaded", "ContentExported", "SpaceExported",
"PagePrinted", "SearchPerformed",
"page_viewed", "space_viewed", "content_exported",
"attachment_downloaded", "search_performed"
)
| extend SearchQuery = tostring(RawEventData.searchQuery)
| extend SpaceKey = tostring(RawEventData.spaceKey)
| extend PageTitle = coalesce(tostring(ObjectName), tostring(RawEventData.pageTitle))
| extend IsSensitiveSearch = (SearchQuery has_any (SensitiveSearchTerms))
| summarize
TotalActions = count(),
UniquePages = dcount(PageTitle),
UniqueSpaces = dcount(SpaceKey),
SensitiveSearchCount = countif(IsSensitiveSearch == true),
ExportCount = countif(ActionType in~ ("ContentExported", "SpaceExported", "PagePrinted", "content_exported", "space_exported")),
DownloadCount = countif(ActionType in~ ("AttachmentDownloaded", "attachment_downloaded")),
ActionTypes = make_set(ActionType, 8),
SampleTitles = make_set(PageTitle, 10),
SensitiveTermsFound = make_set(SearchQuery, 5),
FirstActivity = min(Timestamp),
LastActivity = max(Timestamp)
by AccountObjectId, AccountDisplayName, IPAddress, UserAgent
| where TotalActions > BulkAccessThreshold
or SensitiveSearchCount > 0
or ExportCount > 5
or (UniqueSpaces > 5 and TotalActions > 20)
| extend DurationMinutes = max_of(datetime_diff('minute', LastActivity, FirstActivity), 1)
| extend AccessRatePerMinute = round(toreal(TotalActions) / DurationMinutes, 2)
| extend ThreatIndicator = case(
AccessRatePerMinute > 10, "Automated scraping detected — exceeds 10 pages/min",
SensitiveSearchCount > 0, "Credential/secret hunting via search queries",
ExportCount > 5, "Bulk content export activity",
UniqueSpaces > 10, "Multi-space enumeration pattern",
TotalActions > 100, "High-volume bulk access",
"Elevated Confluence access above threshold")
| project
Timestamp = FirstActivity,
AccountDisplayName,
AccountObjectId,
IPAddress,
UserAgent,
TotalActions,
UniquePages,
UniqueSpaces,
SensitiveSearchCount,
SensitiveTermsFound,
ExportCount,
DownloadCount,
AccessRatePerMinute,
ThreatIndicator,
ActionTypes,
SampleTitles,
LastActivity
| sort by TotalActions desc Data Sources
Required Tables
False Positives
- Content migration projects or Confluence-to-Confluence migrations where automation accesses all pages systematically with high volume and speed
- Documentation teams or technical writers conducting content audits, broken link validation, or space-wide inventories across multiple spaces
- Enterprise search indexing crawlers (Elasticsearch, Algolia connectors) that periodically ingest Confluence content for full-text search
- New employees or contractors onboarding who rapidly read many documentation pages in their first week
- Automated backup and archival tools performing scheduled full-space exports on a recurring basis
- Developer tooling integrations (IDE plugins, CI/CD pipeline documentation steps) that programmatically read Confluence pages
References (8)
- https://attack.mitre.org/techniques/T1213/001/
- https://confluence.atlassian.com/confkb/how-to-enable-user-access-logging-182943.html
- https://www.microsoft.com/en-us/security/blog/2022/03/22/dev-0537-criminal-actor-targeting-organizations-for-data-exfiltration-and-destruction/
- https://developer.atlassian.com/cloud/confluence/rest/v1/intro/
- https://confluence.atlassian.com/doc/confluence-audit-log-1017226528.html
- https://learn.microsoft.com/en-us/defender-cloud-apps/tutorial-shadow-it
- https://learn.microsoft.com/en-us/defender-xdr/advanced-hunting-cloudappevents-table
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1213.001/T1213.001.md
Unlock Pro Content
Get the full detection package for T1213.001 including response playbook, investigation guide, and atomic red team tests.