GCVE-1988-2026-0419
Vulnerability from gna-1988 – Published: 2026-10-02 04:57 – Updated: 2026-10-02 04:57
VLAI
EPSS
VEX
Title
Teams meeting audio and roster data remain accessible via ACS Call Automation connectCall after a participant is removed from the meeting
Summary
Hi Full Disclosure team,
I'm not a traditional security researcher by background - I found this
while working with the ACS and Teams SDKs and followed it through to a full
writeup and PoC. I've done my best to be accurate and responsible
throughout (reporting to MSRC first, giving advance notice of this
disclosure date, and only testing against meetings/tenants I own), but if
anything here is imprecise or doesn't match community conventions, I
apologize in advance and welcome corrections.
*Vendor: MicrosoftProduct: Azure Communication Services (Call Automation) /
Microsoft TeamsVulnerability class: Improper Access Control (CWE-284 /
CWE-863) - missing re-authorization after a privilege/session-revoking
eventReported to vendor: 2026-08-19MSRC case number: VULN-213672Public
disclosure date: 2026-09-15*
--- Description ---
Azure Communication Services (ACS) Call Automation's connectCall operation
can attach an independent media/control session to an in-progress Microsoft
Teams meeting using only the meeting's serverCallId. This identifier is
available to any current participant in the meeting - it's surfaced by both
the Teams desktop and web clients, and by the ACS Calling SDK's own
call.info.getServerCallId() API (used here purely as a clean, reproducible
capture method, not because ACS is a privileged or required path to the
value).
As long as the target meeting's lobby is disabled, possession of the
serverCallId alone is treated as sufficient authorization for connectCall
to keep delivering:
- Live audio, via Call Automation media streaming, and
- Participant/roster metadata, via ParticipantsUpdated events
to the caller's own ACS resource - which can belong to a completely
different Azure subscription/tenant than the meeting organizer's.
Critically, this access is never revalidated against the caller's current
membership in the meeting. If a participant who previously captured the
serverCallId and established a connectCall session is later explicitly
removed ("kicked") from the meeting by the organizer, that removal has no
effect on the independent connectCall session: live audio and roster
metadata continue to be delivered to the attacker's ACS resource for the
remainder of the meeting.
Affected component: Azure Communication Services - Call Automation API,
connectCall operation; the Microsoft Teams meeting authorization boundary
(lobby / admission control / participant removal).
Impact: An unauthorized party can continue listening to live meeting audio
and tracking every participant's presence/roster changes after having been
explicitly removed by the meeting organizer - undermining the one control
Teams gives hosts to enforce "this person is no longer part of the
meeting." This affects the confidentiality of every participant in the
meeting, not just the removed attacker, since their live audio and presence
data keeps flowing to a third party the organizer explicitly tried to
exclude.
--- Steps to reproduce ---
Full harness source, setup instructions, and screenshots are in the repo
linked below (poc/README.md). Summary:
1. The attacker joins the target Teams meeting, which has its lobby
disabled, as a normal participant and retrieves the meeting's internal
server call identifier using a documented capability of the Azure
Communication Services calling SDK.
2. The attacker starts a Call Automation media server and instructs Azure
Communication Services to attach an independent session to the meeting
using that captured identifier, requesting live audio streaming. Azure
immediately begins delivering live audio and participant roster updates to
the attacker's own communication resource, confirmed by the connection and
streaming-started notifications it sends back.
3. The meeting organizer removes the attacker's original participant from
the meeting using Teams' built-in "Remove from meeting" action.
4. Observed result: the attacker's original Teams client session
disconnects as expected, but the independent session from step 2 is not
torn down. Live audio and roster metadata continue to arrive at the
attacker's communication resource for the remainder of the meeting, with no
corresponding disconnection notification for that session.
--- Disclosure timeline ---
2026-08-19 - Reported to Microsoft (MSRC case VULN-213672).
2026-08-27 - MSRC acknowledged the report (automated response: reviewing,
next steps pending).
2026-09-01 - I requested a status update on reproduction on Microsoft's
side, then confirmed an intended public disclosure date of 2026-09-14.
2026-09-13 - I notified MSRC that public disclosure would follow the next
day and offered to delay if MSRC responded within ~24 hours.
2026-09-15 - No further response received from MSRC. Public disclosure, as
previously stated and with prior notice given.
Full writeup, PoC source, and screenshots:
https://github.com/Tryptophan/teams-meeting-audio-vulnerability
Please let me know if you have any questions!
Best,
Jacob Greenway
_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: https://seclists.org/fulldisclosure/
Severity
No CVSS data available.
Assigner
References
5 references
| URL | Tags |
|---|---|
| https://vuln.freearchive.org/archive/full-disclos… | technical-descriptionexploit |
| https://seclists.org/fulldisclosure/2026/Sep/43 | technical-description |
| https://github.com/Tryptophan/teams-meeting-audio… | |
| https://nmap.org/mailman/listinfo/fulldisclosure | |
| https://seclists.org/fulldisclosure/ |
Impacted products
1 product
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| unknown | Teams meeting audio |
Affected:
unknown
|
guessed |
{
"containers": {
"cna": {
"affected": [
{
"product": "Teams meeting audio",
"vendor": "unknown",
"versions": [
{
"status": "affected",
"version": "unknown"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Jacob Greenway"
}
],
"descriptions": [
{
"lang": "en",
"value": "Hi Full Disclosure team,\n\nI\u0027m not a traditional security researcher by background - I found this\nwhile working with the ACS and Teams SDKs and followed it through to a full\nwriteup and PoC. I\u0027ve done my best to be accurate and responsible\nthroughout (reporting to MSRC first, giving advance notice of this\ndisclosure date, and only testing against meetings/tenants I own), but if\nanything here is imprecise or doesn\u0027t match community conventions, I\napologize in advance and welcome corrections.\n\n\n\n\n\n\n*Vendor: MicrosoftProduct: Azure Communication Services (Call Automation) /\nMicrosoft TeamsVulnerability class: Improper Access Control (CWE-284 /\nCWE-863) - missing re-authorization after a privilege/session-revoking\neventReported to vendor: 2026-08-19MSRC case number: VULN-213672Public\ndisclosure date: 2026-09-15*\n\n--- Description ---\n\nAzure Communication Services (ACS) Call Automation\u0027s connectCall operation\ncan attach an independent media/control session to an in-progress Microsoft\nTeams meeting using only the meeting\u0027s serverCallId. This identifier is\navailable to any current participant in the meeting - it\u0027s surfaced by both\nthe Teams desktop and web clients, and by the ACS Calling SDK\u0027s own\ncall.info.getServerCallId() API (used here purely as a clean, reproducible\ncapture method, not because ACS is a privileged or required path to the\nvalue).\n\nAs long as the target meeting\u0027s lobby is disabled, possession of the\nserverCallId alone is treated as sufficient authorization for connectCall\nto keep delivering:\n- Live audio, via Call Automation media streaming, and\n- Participant/roster metadata, via ParticipantsUpdated events\n\nto the caller\u0027s own ACS resource - which can belong to a completely\ndifferent Azure subscription/tenant than the meeting organizer\u0027s.\n\nCritically, this access is never revalidated against the caller\u0027s current\nmembership in the meeting. If a participant who previously captured the\nserverCallId and established a connectCall session is later explicitly\nremoved (\"kicked\") from the meeting by the organizer, that removal has no\neffect on the independent connectCall session: live audio and roster\nmetadata continue to be delivered to the attacker\u0027s ACS resource for the\nremainder of the meeting.\n\nAffected component: Azure Communication Services - Call Automation API,\nconnectCall operation; the Microsoft Teams meeting authorization boundary\n(lobby / admission control / participant removal).\n\nImpact: An unauthorized party can continue listening to live meeting audio\nand tracking every participant\u0027s presence/roster changes after having been\nexplicitly removed by the meeting organizer - undermining the one control\nTeams gives hosts to enforce \"this person is no longer part of the\nmeeting.\" This affects the confidentiality of every participant in the\nmeeting, not just the removed attacker, since their live audio and presence\ndata keeps flowing to a third party the organizer explicitly tried to\nexclude.\n\n--- Steps to reproduce ---\n\nFull harness source, setup instructions, and screenshots are in the repo\nlinked below (poc/README.md). Summary:\n\n1. The attacker joins the target Teams meeting, which has its lobby\ndisabled, as a normal participant and retrieves the meeting\u0027s internal\nserver call identifier using a documented capability of the Azure\nCommunication Services calling SDK.\n2. The attacker starts a Call Automation media server and instructs Azure\nCommunication Services to attach an independent session to the meeting\nusing that captured identifier, requesting live audio streaming. Azure\nimmediately begins delivering live audio and participant roster updates to\nthe attacker\u0027s own communication resource, confirmed by the connection and\nstreaming-started notifications it sends back.\n3. The meeting organizer removes the attacker\u0027s original participant from\nthe meeting using Teams\u0027 built-in \"Remove from meeting\" action.\n4. Observed result: the attacker\u0027s original Teams client session\ndisconnects as expected, but the independent session from step 2 is not\ntorn down. Live audio and roster metadata continue to arrive at the\nattacker\u0027s communication resource for the remainder of the meeting, with no\ncorresponding disconnection notification for that session.\n\n--- Disclosure timeline ---\n\n2026-08-19 - Reported to Microsoft (MSRC case VULN-213672).\n2026-08-27 - MSRC acknowledged the report (automated response: reviewing,\nnext steps pending).\n2026-09-01 - I requested a status update on reproduction on Microsoft\u0027s\nside, then confirmed an intended public disclosure date of 2026-09-14.\n2026-09-13 - I notified MSRC that public disclosure would follow the next\nday and offered to delay if MSRC responded within ~24 hours.\n2026-09-15 - No further response received from MSRC. Public disclosure, as\npreviously stated and with prior notice given.\n\nFull writeup, PoC source, and screenshots:\nhttps://github.com/Tryptophan/teams-meeting-audio-vulnerability\n\nPlease let me know if you have any questions!\n\nBest,\nJacob Greenway\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-284",
"description": "CWE-284",
"lang": "en",
"type": "CWE"
},
{
"cweId": "CWE-863",
"description": "CWE-863",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-02T04:57:33Z",
"orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"shortName": "VULNARCHIVE"
},
"references": [
{
"tags": [
"technical-description",
"exploit"
],
"url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/43"
},
{
"tags": [
"technical-description"
],
"url": "https://seclists.org/fulldisclosure/2026/Sep/43"
},
{
"url": "https://github.com/Tryptophan/teams-meeting-audio-vulnerability"
},
{
"url": "https://nmap.org/mailman/listinfo/fulldisclosure"
},
{
"url": "https://seclists.org/fulldisclosure/"
}
],
"source": {
"defect": [
"https://seclists.org/fulldisclosure/2026/Sep/43"
],
"discovery": "EXTERNAL"
},
"title": "Teams meeting audio and roster data remain accessible via ACS Call Automation connectCall after a participant is removed from the meeting",
"x_gcve": [
{
"recordType": "advisory",
"relationships": [],
"vulnId": "GCVE-1988-2026-0419",
"x_vulnarchive": {
"archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Sep/43",
"automated": true,
"contentSha256": "2d6b8b4b8347d43b845ba976b026289406c9c3cc7c154974fde1f391eb9daefb",
"evidenceScore": 10,
"messageId": "",
"originalUrl": "https://seclists.org/fulldisclosure/2026/Sep/43",
"policy": "vulnarchive-1",
"sourceFormat": "text/html",
"sourcePublishedAt": "2026-09-16T05:58:27Z"
}
}
]
}
},
"cveMetadata": {
"assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
"assignerShortName": "VULNARCHIVE",
"datePublished": "2026-10-02T04:57:33Z",
"dateUpdated": "2026-10-02T04:57:33Z",
"state": "PUBLISHED",
"vulnId": "GCVE-1988-2026-0419"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
Loading…
Loading…
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Loading…
Loading…
The MITRE ATT&CK techniques below are AI-generated suggestions, inferred from the description of the
vulnerability by the CIRCL/vulnerability-attack-technique-classification-roberta-base
model, served locally by ML-Gateway.
They have not been verified by an analyst and are provided for guidance only.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Loading…
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.
Loading…