<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>StumbleSOC Blog on Drew Arpino (Stumblesec)</title>
        <link>https://stumblesec.com/categories/stumblesoc-blog/</link>
        <description>Recent content in StumbleSOC Blog on Drew Arpino (Stumblesec)</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Sun, 19 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://stumblesec.com/categories/stumblesoc-blog/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>StumbleSOC Blog Stories  — The Teams Call Compromise</title>
            <link>https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/</link>
            <pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate>
            <guid>https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/</guid>
            <description>&lt;img src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/2f9fcf40f3ddb4bc86f758723a4dd02d_MD5.jpg&#34; alt=&#34;Featured image of post StumbleSOC Blog Stories  — The Teams Call Compromise&#34; /&gt;&lt;h3 id=&#34;stumblesoc-stories-the-teams-call-compromise&#34;&gt;StumbleSOC Stories: The Teams Call Compromise&#xA;&lt;/h3&gt;&lt;h4 id=&#34;a-tale-of-two-adams-microsoft-teams-vishing-and-practical-detection-with-microsoft-defenderxdr&#34;&gt;A Tale of Two Adams: Microsoft Teams Vishing and Practical Detection with Microsoft Defender XDR&#xA;&lt;/h4&gt;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;360px&#34; data-flex-grow=&#34;150&#34; height=&#34;533&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/2f9fcf40f3ddb4bc86f758723a4dd02d_MD5.jpg&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Photo by &lt;a class=&#34;link&#34; href=&#34;https://unsplash.com/@appshunter?utm_source=medium&amp;amp;utm_medium=referral&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;appshunter.io&lt;/a&gt; on &lt;a class=&#34;link&#34; href=&#34;https://unsplash.com/?utm_source=medium&amp;amp;utm_medium=referral&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Unsplash&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;introduction--a-tale-of-twoadams&#34;&gt;Introduction — &lt;em&gt;A Tale of Two Adams&lt;/em&gt;&#xA;&lt;/h3&gt;&lt;p&gt;This week, I&amp;rsquo;m taking another detour from my usual walkthrough format to try something a little different. This is another entry in my &lt;em&gt;StumbleSOC Stories&lt;/em&gt; series, a collection of field notes and real-world anecdotes. It&amp;rsquo;s essentially my working diary, where I recount interesting incidents with actionable insights and takeaways.&lt;/p&gt;&#xA;&lt;p&gt;This particular story is adapted from two real incidents separated by about ten months, both involving &lt;strong&gt;Microsoft Teams&lt;/strong&gt;, voice phishing, and a suspiciously helpful individual named Adam. It&amp;rsquo;s less a tale of deep technical chops and more a reminder of how effective social engineering can be when it shows up in a familiar place, at the wrong time, wearing a friendly display name.&lt;/p&gt;&#xA;&lt;p&gt;Rather than walk through this as a formal incident response case study, I&amp;rsquo;m taking more of an inside-out approach. We&amp;rsquo;ll stumble through what tipped us off, how we scoped what happened, where our controls worked, and, more importantly, where they didn&amp;rsquo;t. Along the way, I&amp;rsquo;ll highlight the adjustments the organization made and how small changes in visibility, reporting, and detection made a real difference the second time around.&lt;/p&gt;&#xA;&lt;p&gt;The goal here isn&amp;rsquo;t to document a perfect response or to shame a user who did everything &amp;ldquo;wrong.&amp;rdquo; It&amp;rsquo;s to show how quickly trust can be established with ubiquitous, real-time collaboration tools, how easily that trust can be exploited, and how defenders can adapt without cloistering themselves off from tools the business relies on every day.&lt;/p&gt;&#xA;&lt;p&gt;This is &lt;em&gt;A Tale of Two Adams&lt;/em&gt;. Let&amp;rsquo;s go!&lt;/p&gt;&#xA;&lt;h3 id=&#34;hello-this-is-adam-from-your-it-department&#34;&gt;&amp;ldquo;Hello, this is Adam from your IT Department.&amp;rdquo;&#xA;&lt;/h3&gt;&lt;p&gt;Back in the summer of 2025, I had my first close encounter with &lt;strong&gt;Microsoft Teams&lt;/strong&gt; voice phishing. I know, fashionably late to the vishing party. Bear with me. A user in an organization I was supporting received a call with the display name &amp;ldquo;&lt;em&gt;IT Support (Working From Home)&lt;/em&gt;&amp;rdquo;. You can probably guess where this is going.&lt;/p&gt;&#xA;&lt;p&gt;The security team picked up on this when alerts started popping for strange artifacts blocked by the &lt;strong&gt;IPS&lt;/strong&gt;, but nothing surfaced from the &lt;strong&gt;EDR&lt;/strong&gt; tooling, and there was no report from the user.&lt;/p&gt;&#xA;&lt;p&gt;After a quick triage, the team pieced together that the user had attempted to open &lt;a class=&#34;link&#34; href=&#34;https://attack.mitre.org/software/S1209/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Quick Assist&lt;/strong&gt;&lt;/a&gt; on their work laptop, a preinstalled remote support utility in Windows. That activity was blocked by the &lt;em&gt;EDR&lt;/em&gt; network sensor due to a pre-existing URL block indicator. A key detail here is that these informational-level events tend to be pretty noisy in that environment, so they were suppressed and never surfaced in the queue.&lt;/p&gt;&#xA;&lt;p&gt;From there, we identified that the user had also received a suspicious email containing instructions and a link to download and install another remote support tool, &lt;strong&gt;Zoho Assist&lt;/strong&gt;. Shortly after, there was an attempt to download a ZIP file via &lt;code&gt;curl&lt;/code&gt;. That connection attempt is ultimately what the &lt;em&gt;IPS&lt;/em&gt; picked up and blocked.&lt;/p&gt;&#xA;&lt;p&gt;Once this activity was confirmed, we pumped the brakes, isolated the device, and reached out to the user for more context:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&amp;ldquo;OMG, someone named_ &lt;strong&gt;&lt;em&gt;Adam&lt;/em&gt;&lt;/strong&gt; _called me from €˜IT Support (Working From Home) (External)&amp;rsquo; and ran something on my computer. After the call I was like&amp;hellip; I hope that was legit.&amp;rdquo; It wasn&amp;rsquo;t. The user had their suspicions too (maybe the &lt;em&gt;EXTERNAL&lt;/em&gt; tag helped) and had already rebooted the device, cutting off the remote access. We mostly just confirmed what they already suspected. The attacker only had access to the device for a few minutes, but in that short window there was already a lot to learn.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;Then, almost on cue, as we were discussing the situation, Adam called back to &amp;ldquo;resolve the connection issues.&amp;rdquo; Adam seemed like an initial access-type actor, not the man with the plan. He explained that he was totally stumped as to why the commands he ran hadn&amp;rsquo;t worked (thanks, IPS) and that the issue needed to be escalated. Before that could happen though, he needed to get back on the system to adjust the power-saving settings so it wouldn&amp;rsquo;t go to sleep. The device, he insisted, had to be left on overnight.&lt;/p&gt;&#xA;&lt;p&gt;That was the cue to shut down the party, bounce the bad guy, and clean up. While no damage was done, it warranted a hard look at what hadn&amp;rsquo;t gone well. One immediate outcome was the decision to throw together a detection rule to flag &lt;em&gt;Quick Assist&lt;/em&gt; activity so there&amp;rsquo;d be an early signal if this happened again. It wasn&amp;rsquo;t elegant, but it got the job done, and it&amp;rsquo;s an important detail for later.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;d almost forgotten about this incident until&amp;hellip;&lt;/p&gt;&#xA;&lt;h3 id=&#34;10-months-later-hello-this-is-a-different-adam-from-your-it-department&#34;&gt;10 months later: &amp;ldquo;Hello, this is (a different) Adam from your IT Department.&amp;rdquo;&#xA;&lt;/h3&gt;&lt;p&gt;One Friday afternoon, right before a holiday weekend, an unexpected helpdesk ticket came in. A user reported that they&amp;rsquo;d missed a &lt;strong&gt;Microsoft Teams&lt;/strong&gt; call from a suspicious caller with the display name &amp;ldquo;&lt;em&gt;HELP DESK.&lt;/em&gt;&amp;rdquo; Then, only about five minutes later, that rarely seen and almost forgotten &lt;em&gt;Quick Assist&lt;/em&gt; detection alert from way back in the summer popped on another workstation.&lt;/p&gt;&#xA;&lt;p&gt;Could it be another Adam?&lt;/p&gt;&#xA;&lt;p&gt;This time, we were ready.&lt;/p&gt;&#xA;&lt;p&gt;When the team contacted the user immediately, they explained they had been speaking with a purported internal sysadmin and, wouldn&amp;rsquo;t you believe it, also named Adam. The timing couldn&amp;rsquo;t have been better for the attacker. With a holiday weekend looming and the user trying to wrap things up before heading out, New Adam&amp;rsquo;s call landed at exactly the wrong moment. The user just wanted to be helpful and cross one last thing off their list.&lt;/p&gt;&#xA;&lt;p&gt;As instructed, the victim tried the classic &lt;code&gt;Windows + Ctrl + Q&lt;/code&gt; shortcut to open &lt;em&gt;Quick Assist&lt;/em&gt;. Blocked.&lt;/p&gt;&#xA;&lt;p&gt;New Adam pivoted, instructing them to download another remote management tool, &lt;strong&gt;AnyDesk&lt;/strong&gt;. Also blocked.&lt;/p&gt;&#xA;&lt;p&gt;At that point, the user recalled that Adam sounded disappointed and abruptly hung up. The effort, it seemed, was now too great.&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&amp;ldquo;After asking for 2 tools he gave up. And he sounded disappointed when they came up the way they did.&amp;rdquo;&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;The user headed into their last meeting of the day, not even registering that Adam had just been an attacker trying to gain remote access to their laptop.&lt;/p&gt;&#xA;&lt;p&gt;Fortunately, the earlier incident had given the team a pretty clear view of the playbook. This time, preventive controls and detection did exactly what they were supposed to do. No access was granted. The lessons from the earlier stumble paid off, turning this into a tidy containment and a perfect teachable moment.&lt;/p&gt;&#xA;&lt;p&gt;The user genuinely couldn&amp;rsquo;t believe it. &lt;em&gt;Teams&lt;/em&gt; showed &lt;em&gt;Helpdesk&lt;/em&gt;, plain as day, and Adam sounded like he wanted to help, right? The thing is, if they&amp;rsquo;d paused and done even a basic directory search in their &lt;em&gt;Teams&lt;/em&gt; client, they would&amp;rsquo;ve quickly discovered what we already knew. There was no Adam.&lt;/p&gt;&#xA;&lt;p&gt;A name or picture in &lt;em&gt;Teams&lt;/em&gt; doesn&amp;rsquo;t prove who the caller is, a tone doesn&amp;rsquo;t prove intent, yet this is exactly how trust gets exploited.&lt;/p&gt;&#xA;&lt;p&gt;It might seem obvious in hindsight, but &lt;em&gt;vishing&lt;/em&gt; can be just as effective as email-based phishing. This isn&amp;rsquo;t a new tactic, but it remains powerful because, much like classic tech support scams, it preys on implicit trust and urgency. In most organizations, IT is seen as the steward of the device. Users get conditioned to a familiar break-fix rhythm. People want to help, and they want to be helped.&lt;/p&gt;&#xA;&lt;p&gt;Most security awareness training, including in this case, still focuses heavily on email threats. It&amp;rsquo;s often so fixated on blockbuster phishing statistics that the idea that something like a &lt;em&gt;Teams&lt;/em&gt; voice call could be an entry point doesn&amp;rsquo;t even cross a user&amp;rsquo;s mind.&lt;/p&gt;&#xA;&lt;p&gt;But that&amp;rsquo;s the job isn&amp;rsquo;t it? Keep learning. Keep improving. Keep protecting.&lt;/p&gt;&#xA;&lt;p&gt;So, what&amp;rsquo;s the point of this story?&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-techrecs&#34;&gt;The Tech Recs&#xA;&lt;/h3&gt;&lt;p&gt;Let&amp;rsquo;s talk options. What can we actually do to impose cost on the next would-be Adams and defend against these attacks in an organization that can&amp;rsquo;t simply wall itself in by blocking &lt;em&gt;Teams&lt;/em&gt; calls from untrusted externals altogether?&lt;/p&gt;&#xA;&lt;p&gt;This is very much a &lt;strong&gt;Microsoft-focused&lt;/strong&gt; perspective, but a lot of the thinking applies more broadly. The goal here isn&amp;rsquo;t to solve &lt;em&gt;vishing&lt;/em&gt; with a single control or to block everything outright. It&amp;rsquo;s to add friction, make these attacks harder to pull off, noisier, and more likely to stumble before they go anywhere useful.&lt;/p&gt;&#xA;&lt;p&gt;Much of what follows is grounded in Microsoft&amp;rsquo;s guidance for protecting &lt;em&gt;Teams&lt;/em&gt; through &lt;strong&gt;Microsoft Defender for Office 365&lt;/strong&gt;, which provides a solid baseline. From there, the emphasis shifts to what actually helps in practice and how relatively small changes can turn the tides back in the defender&amp;rsquo;s favor.&lt;/p&gt;&#xA;&lt;p&gt;These recommendations pull from Microsoft SecOps documentation, sprinkled in with firsthand observations from incidents like the ones above. I&amp;rsquo;m intentionally tying together ideas that Microsoft documentation often treats in isolation and shaping them into something more prescriptive and practical.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/mdo-support-teams-sec-ops-guide#enable-secops-to-hunt-for-threats-and-detections-in-microsoft-teams&#34;  title=&#34;https://learn.microsoft.com/en-us/defender-office-365/mdo-support-teams-sec-ops-guide#enable-secops-to-hunt-for-threats-and-detections-in-microsoft-teams&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Security Operations Guide for Teams protection — Microsoft Defender for Office 365&lt;/strong&gt;&#xA;_A prescriptive playbook for SecOps personnel to manage Microsoft Teams protection in Microsoft Defender for Office 365._learn.microsoft.com&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/mdo-support-teams-sec-ops-guide#enable-secops-to-hunt-for-threats-and-detections-in-microsoft-teams&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you work in the Microsoft ecosystem, a quick heads-up: some of these capabilities are still in preview, and others evolve quickly as &lt;em&gt;Teams&lt;/em&gt; and &lt;em&gt;Defender&lt;/em&gt; continue to change. Depending on when you&amp;rsquo;re reading this, specific features, settings, or behaviors may look a little different.&lt;/p&gt;&#xA;&lt;p&gt;From here on out, we&amp;rsquo;ll get concrete.&lt;/p&gt;&#xA;&lt;h3 id=&#34;user-initiated-reporting-of-suspicious-teams-calls-ormessages&#34;&gt;User-Initiated Reporting of Suspicious Teams Calls or Messages&#xA;&lt;/h3&gt;&lt;p&gt;Remember when I said one of the pitfalls was too much phish-focused training?&lt;/p&gt;&#xA;&lt;p&gt;The first, and arguably easiest, improvement here, especially in a straight-up &lt;strong&gt;Microsoft&lt;/strong&gt; shop, is empowering users to report more than just email. Suspicious &lt;em&gt;Teams&lt;/em&gt; messages and calls should fall into that same muscle memory. And yes, there&amp;rsquo;s a reasonably frictionless way to do this without forcing users to open a helpdesk ticket. Instead, those reports can flow directly into your incident queue.&lt;/p&gt;&#xA;&lt;p&gt;Microsoft has clearly put more attention on this threat over the past year and has improved their offerings as a result. As this attack surface continues to grow, it makes sense to lean on your user base and take advantage of what&amp;rsquo;s probably already been drilled into them ad-nauseam. If users know how to report phishing emails, reporting suspicious &lt;em&gt;Teams&lt;/em&gt; activity shouldn&amp;rsquo;t feel like a new behavior.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/submissions-teams#turn-off-or-turn-on-user-reporting-of-teams-messages-in-the-defender-portal&#34;  title=&#34;https://learn.microsoft.com/en-us/defender-office-365/submissions-teams#turn-off-or-turn-on-user-reporting-of-teams-messages-in-the-defender-portal&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;User reported settings in Teams - Microsoft Defender for Office 365&lt;/strong&gt;&#xA;_Admins can configure whether users can report malicious messages or calls in Microsoft Teams._learn.microsoft.com&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/submissions-teams#turn-off-or-turn-on-user-reporting-of-teams-messages-in-the-defender-portal&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;From an admin perspective, this starts in the &lt;strong&gt;Teams Admin Center&lt;/strong&gt;. Depending on whether you&amp;rsquo;re using the classic policy experience or the newer unified policy pages, the paths look a little different.&lt;/p&gt;&#xA;&lt;h4 id=&#34;for-messages&#34;&gt;For Messages:&#xA;&lt;/h4&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Classic&lt;/strong&gt;: &lt;em&gt;Teams Admin&lt;/em&gt; → &lt;em&gt;Messaging&lt;/em&gt; → &lt;em&gt;Messaging Policies&lt;/em&gt; → &lt;strong&gt;&lt;em&gt;Report a security concern&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unified policy page&lt;/strong&gt;: &lt;code&gt;https://admin.teams.microsoft.com/one-policy/settings/messaging&lt;/code&gt; → &lt;strong&gt;&lt;em&gt;Report a security concern&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;1959px&#34; data-flex-grow=&#34;816&#34; height=&#34;98&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/ee8109d74f516c41c0b307b0b0d7be75_MD5.png&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;for-voice-calls-preview&#34;&gt;For Voice Calls (Preview):&#xA;&lt;/h4&gt;&lt;p&gt;For voice calls, this capability is still in &lt;strong&gt;Preview&lt;/strong&gt; at the time of writing, but it&amp;rsquo;s worth enabling where available:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/microsoftteams/end-user-reporting-teams-calling&#34;  title=&#34;https://learn.microsoft.com/en-us/microsoftteams/end-user-reporting-teams-calling&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Report suspicious Teams Calls — Microsoft Teams&lt;/strong&gt;&#xA;_Learn how users can report suspicious or scam calls in Microsoft Teams_learn.microsoft.com&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/microsoftteams/end-user-reporting-teams-calling&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Classic&lt;/strong&gt;: &lt;em&gt;Teams Admin&lt;/em&gt; → &lt;em&gt;Voice&lt;/em&gt; → &lt;em&gt;Calling Policies&lt;/em&gt; → &lt;strong&gt;&lt;em&gt;Report a call&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Unified policy page&lt;/strong&gt;: &lt;code&gt;https://admin.teams.microsoft.com/one-policy/settings/calling&lt;/code&gt; → &lt;strong&gt;&lt;em&gt;Report a call&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;339px&#34; data-flex-grow=&#34;141&#34; height=&#34;565&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/bbb7939d709c78017ac826d6d7d55d94_MD5.png&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Image Credit: &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/submissions-teams#turn-off-or-turn-on-user-reporting-in-the-teams-admin-center&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/defender-office-365/submissions-teams#turn-off-or-turn-on-user-reporting-in-the-teams-admin-center&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;microsoft-defender-portal-enablement&#34;&gt;Microsoft Defender Portal Enablement&#xA;&lt;/h4&gt;&lt;p&gt;Once reporting is enabled in the &lt;em&gt;Teams Admin Center&lt;/em&gt;, there&amp;rsquo;s a corresponding step on the &lt;em&gt;Defender&lt;/em&gt; side. In the &lt;strong&gt;Microsoft Defender&lt;/strong&gt; portal, you&amp;rsquo;ll want to validate:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Microsoft Defender&lt;/em&gt; → &lt;em&gt;Settings&lt;/em&gt; → &lt;em&gt;Email &amp;amp; collaboration&lt;/em&gt; → &lt;em&gt;User reported settings&lt;/em&gt; → &lt;strong&gt;&lt;em&gt;Monitor reported items in Microsoft Teams&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;663px&#34; data-flex-grow=&#34;276&#34; height=&#34;231&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/355bd4d761471f06e96c640294c751e3_MD5.png&#34; width=&#34;639&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; &amp;ldquo;The value of this setting is meaningful only if reporting is turned on in the Teams admin center as described in the previous section.&amp;rdquo; Meaning only turn it on if you&amp;rsquo;ve &lt;em&gt;also&lt;/em&gt; enabled reporting in &lt;em&gt;Teams&lt;/em&gt;, because it won&amp;rsquo;t work otherwise.&lt;/p&gt;&#xA;&lt;p&gt;While you&amp;rsquo;re in there, it&amp;rsquo;s also worth jumping down to the &lt;em&gt;Microsoft Teams protection&lt;/em&gt; blade and confirming that Zero-hour auto purge (ZAP) for &lt;em&gt;Teams&lt;/em&gt; chats and channels is enabled. Specifically, &amp;ldquo;Protect Teams chats and channels using retroactive content scanning and removal&amp;quot;should be set to &lt;strong&gt;On&lt;/strong&gt;, with appropriate quarantine policies behind it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;994px&#34; data-flex-grow=&#34;414&#34; height=&#34;193&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/9871c590ab55f2deaeea6605d5025803_MD5.png&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once everything is setup, user-initiated reporting gives you signals very similar to traditional phishing workflows, &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/mdo-support-teams-sec-ops-guide#integrate-user-reported-teams-items-into-secops-incident-response&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;including alerts like&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Teams message reported by user as security risk&lt;/li&gt;&#xA;&lt;li&gt;Teams message reported by user as not security risk&lt;/li&gt;&#xA;&lt;li&gt;Teams call reported by user as a security risk&lt;/li&gt;&#xA;&lt;li&gt;Teams call reported by user as a not security risk&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The most important part, though, isn&amp;rsquo;t the toggle. It&amp;rsquo;s making sure this shows up in end-user training. If users don&amp;rsquo;t know it exists, they can&amp;rsquo;t use it, and the whole control adds no value.&lt;/p&gt;&#xA;&lt;p&gt;And if someone does fall for a vishing call? Turn them into a security champion. Let them share what happened with their team. Peer accountability and humility are often far more effective than yet another reminder from IT about &amp;ldquo;being vigilant.&amp;rdquo;&lt;/p&gt;&#xA;&lt;h3 id=&#34;blocking-externalcontacts&#34;&gt;Blocking External Contacts&#xA;&lt;/h3&gt;&lt;p&gt;Another obvious, quick win here is blocking the malicious external contact outright. It&amp;rsquo;s not the most painful control on the pyramid of pain, but it &lt;em&gt;does&lt;/em&gt; stop the immediate threat. In both of the incidents above, and based on broader &lt;a class=&#34;link&#34; href=&#34;https://www.cynet.com/blog/emerging-threat-microsoft-teams-vishing-campaign-continues/#:~:text=The%20attacker%20contacts%20the%20targeted,to%20Office%20365%20for%20Business.&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;industry reporting&lt;/a&gt;, these attackers seem to favor &lt;code&gt;[.]onmicrosoft.com&lt;/code&gt; domains, which makes this option particularly useful.&lt;/p&gt;&#xA;&lt;p&gt;What&amp;rsquo;s changed recently, and for the better, is Microsoft&amp;rsquo;s decision to let security teams participate directly through the &lt;strong&gt;Tenant Allow/Block List&lt;/strong&gt; (TABL) on the &lt;em&gt;Defender&lt;/em&gt; side.&lt;/p&gt;&#xA;&lt;p&gt;This capability nicely complements the user reporting feature. More importantly, it gives security teams a way to act quickly when admin roles are split across functions. If your SOC sees a suspicious call artifact and needs to action on it, having to wait on a separate admin team can feel like unnecessary friction.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/tenant-allow-block-list-teams-domains-configure&#34;  title=&#34;https://learn.microsoft.com/en-us/defender-office-365/tenant-allow-block-list-teams-domains-configure&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Block domains and addresses in Microsoft Teams using the Tenant Allow/Block List - Microsoft&amp;hellip;&lt;/strong&gt;&#xA;_Admins can learn how to block domains and addresses in Microsoft Teams using the Tenant Allow/Block List._learn.microsoft.com&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/tenant-allow-block-list-teams-domains-configure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;On the &lt;em&gt;Teams&lt;/em&gt; side, the setting to block external users (like our two Adams calling from &lt;code&gt;[.]onmicrosoft.com&lt;/code&gt; domains) lives here:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Teams Admin Center&lt;/em&gt; → &lt;em&gt;External Collaboration&lt;/em&gt; → &lt;em&gt;External Access&lt;/em&gt; → &lt;em&gt;Organizational settings&lt;/em&gt; → &lt;strong&gt;&lt;em&gt;Block specific users from communicating with people in my organization&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;1500px&#34; data-flex-grow=&#34;625&#34; height=&#34;128&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/6e110fe747777351abc7be2da98d427a_MD5.png&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Image Credit: &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/tenant-allow-block-list-teams-domains-configure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Block domains and addresses in Microsoft Teams using the Tenant Allow/Block List — Microsoft Defender for Office 365 | Microsoft Learn&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; For this to work, the &lt;strong&gt;&lt;em&gt;Allow or block external domain&lt;/em&gt;&lt;/strong&gt; option must be set to either &lt;strong&gt;&lt;em&gt;Allow all external domains&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;Block only specific external domains.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now the fun part: Traditionally, maintaining this list required a &lt;em&gt;Teams&lt;/em&gt; admin role. To better support least privilege, Microsoft added the option to allow the security team to manage blocked users and domains directly through &lt;em&gt;Defender&lt;/em&gt;. Enabling &amp;ldquo;&lt;strong&gt;&lt;em&gt;Allow my security team to manage blocked domains and blocked users&lt;/em&gt;&lt;/strong&gt;&amp;ldquo;hands day-to-day action to the people already doing triage.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;3200px&#34; data-flex-grow=&#34;1333&#34; height=&#34;60&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/dd0a8f05c13df3376700219bde1b5b07_MD5.png&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once that setting is flipped, security teams can manage blocked &lt;em&gt;Teams&lt;/em&gt; senders directly from the &lt;em&gt;Defender&lt;/em&gt; portal using the &lt;em&gt;Tenant Allow/Block List&lt;/em&gt;, without jumping between consoles or roles. It&amp;rsquo;s not exciting, but it reduces response time, and in incidents like these, that&amp;rsquo;s important.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;582px&#34; data-flex-grow=&#34;242&#34; height=&#34;250&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/0a53a9e814ef4c240e70e44eafad54d3_MD5.png&#34; width=&#34;607&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;pull-audit-logs-to-confirm-who-else-received-acall&#34;&gt;Pull Audit Logs to Confirm Who Else Received a Call&#xA;&lt;/h3&gt;&lt;p&gt;Going back to the stories of the two Adams, one important step after blocking the contact was figuring out who else they might have reached. Scoping impact matters, and in this case we needed to understand whether this activity stopped with a single user or if others had also been contacted.&lt;/p&gt;&#xA;&lt;p&gt;At the time of writing, this is a bit more painful than it should be. There isn&amp;rsquo;t a relevant &lt;em&gt;Advanced Hunting&lt;/em&gt; table available for &lt;em&gt;Teams&lt;/em&gt; calls yet.&lt;/p&gt;&#xA;&lt;p&gt;I emphasize &lt;em&gt;yet&lt;/em&gt; because Microsoft recently announced in a blog post, &amp;ldquo;From Impersonation Calls to Transparent Reporting: Defending the New Front Door of Attacks&amp;quot;that this gap is closing. Among several updates, Microsoft highlighted that &amp;ldquo;&lt;em&gt;Microsoft Defender has turned Teams calling from a blind spot into a first-class SOC signal, including the ability to investigate Teams calling activity at scale via Advanced Hunting&lt;/em&gt;.&amp;rdquo; Hooray!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/from-impersonation-calls-to-transparent-reporting-defending-the-new-front-door-o/4503050&#34;  title=&#34;https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/from-impersonation-calls-to-transparent-reporting-defending-the-new-front-door-o/4503050&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;From Impersonation Calls to Transparent Reporting: Defending the New Front Door of Attacks |&amp;hellip;&lt;/strong&gt;&#xA;_Email is still a major entry point-but it&amp;rsquo;s no longer the only one that matters. Today&amp;rsquo;s attackers are increasingly&amp;hellip;_techcommunity.microsoft.com&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/from-impersonation-calls-to-transparent-reporting-defending-the-new-front-door-o/4503050&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s a welcome change, but it didn&amp;rsquo;t help us when we actually needed to identify who else the Adams had contacted. So for this incident, and for this blog, we had to fall back to what&amp;rsquo;s available today and leverage the &lt;em&gt;Unified Audit Log&lt;/em&gt; instead.&lt;/p&gt;&#xA;&lt;p&gt;From a &lt;strong&gt;Defender&lt;/strong&gt; perspective, this lives under:&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Microsoft Defender&lt;/em&gt; → &lt;em&gt;System&lt;/em&gt; → &lt;em&gt;Audit&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/purview/audit-log-activities#teams-activities&#34;  title=&#34;https://learn.microsoft.com/en-us/purview/audit-log-activities#teams-activities&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Audit log activities&lt;/strong&gt;&#xA;_Discover how to monitor and investigate activities in Microsoft 365 with the unified audit log. Search for specific&amp;hellip;_learn.microsoft.com&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/purview/audit-log-activities#teams-activities&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;To scope activity, we might structure the search using the following parameters:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Workload&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;MicrosoftTeams&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Activities&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;Operation&lt;/em&gt;: &lt;code&gt;CallParticipantDetail&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Friendly name&lt;/em&gt;: &lt;em&gt;Added information about call participants&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Operation&lt;/em&gt;: &lt;code&gt;ChatCreated&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;em&gt;Friendly name&lt;/em&gt;: &lt;em&gt;Created a chat&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Keyword search (optional)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The attacker&amp;rsquo;s email address, often from a &lt;code&gt;[.]onmicrosoft.com&lt;/code&gt; domain, if it was reported by the user or visible in their &lt;em&gt;Teams&lt;/em&gt; client&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;884px&#34; data-flex-grow=&#34;368&#34; height=&#34;217&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/764e3b408ca9434403dcb628477e4642_MD5.png&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;So, what&amp;rsquo;s the downside with this approach? Lag.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve spent any time in the Microsoft ecosystem, this won&amp;rsquo;t be surprising. There&amp;rsquo;s a delay between when an event occurs and when it becomes searchable in the audit log. Microsoft is fairly explicit about this, noting that for core services like &lt;em&gt;Teams&lt;/em&gt;, &amp;quot; # &amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/purview/audit-search#:~:text=Microsoft%20doesn%27t%20guarantee%20a,commit%20to%20a%20specific%20time.&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;audit records typically become available 60 to 90 minutes after the event,&lt;/a&gt;&amp;rdquo;&#xA;and sometimes longer.&lt;/p&gt;&#xA;&lt;p&gt;Still, it&amp;rsquo;s better than nothing. In these cases, it helped confirm that only the original reporter and the second victim had any contact with the second Adam.&lt;/p&gt;&#xA;&lt;p&gt;The takeaway here is simple. Knowing which logs exist, where to find them, and what their limitations are is critical when responding to an incident. Even imperfect visibility can make the difference between guessing and confidently scoping the impact.&lt;/p&gt;&#xA;&lt;h3 id=&#34;disable--detect-quickassist&#34;&gt;Disable &amp;amp; Detect Quick Assist:&#xA;&lt;/h3&gt;&lt;p&gt;The last recommendation for this piece is to better control and monitor the remote management and support tools in your environment. I&amp;rsquo;m not going to deep-dive into RMM tooling as a whole here, since this varies a lot by organization, tooling, and maturity. That said, understanding which tools are normal and approved, which aren&amp;rsquo;t, and which are commonly abused by threat actors can go a long way toward detecting potentially malicious activity.&lt;/p&gt;&#xA;&lt;p&gt;In this story, &lt;em&gt;Quick Assist&lt;/em&gt; was already blocked, but it didn&amp;rsquo;t raise an alert (learning moment #1). The second RMM tool, &lt;em&gt;Zoho Assist&lt;/em&gt;, wasn&amp;rsquo;t blocked at all (learning moment #2). That combination presented an opportunity to reassess how RMM tools were controlled overall, which directly led to successfully blocking &lt;em&gt;AnyDesk&lt;/em&gt; during the second incident. It also highlighted something more interesting. Even a blocked tool like &lt;em&gt;Quick Assist&lt;/em&gt; can still provide detection value and act as a kind of canary in the coal mine.&lt;/p&gt;&#xA;&lt;p&gt;So rather than trying to solve RMM tooling holistically in this post, let&amp;rsquo;s focus on that first learning moment: &lt;em&gt;Quick Assist&lt;/em&gt;. It&amp;rsquo;s built into Windows, frequently abused in social engineering attacks, and a good place to impose some friction.&lt;/p&gt;&#xA;&lt;p&gt;In a &lt;strong&gt;Microsoft Defender for Endpoint&lt;/strong&gt; environment, Microsoft&amp;rsquo;s own &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/windows/client-management/client-tools/quick-assist#disable-quick-assist-within-your-organization&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;guidance&lt;/a&gt; recommends disabling &lt;em&gt;Quick Assist&lt;/em&gt; by blocking its service endpoint using a URL-based indicator. Specifically, this means blocking traffic to:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://remoteassistance.support.services.microsoft.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://remoteassistance.support.services.microsoft.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/windows/client-management/client-tools/quick-assist#disable-quick-assist-within-your-organization&#34;  title=&#34;https://learn.microsoft.com/en-us/windows/client-management/client-tools/quick-assist#disable-quick-assist-within-your-organization&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Use Quick Assist to help users&lt;/strong&gt;&#xA;_Learn how IT Pros can use Quick Assist to help users._learn.microsoft.com&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/windows/client-management/client-tools/quick-assist#disable-quick-assist-within-your-organization&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While this approach won&amp;rsquo;t uninstall &lt;em&gt;Quick Assist&lt;/em&gt; (which is also a valid option), it prevents the application from establishing a session. More importantly for us, it preserves telemetry. That detection signal turned out to be really valuable compared to simply removing the tool entirely.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/windows/client-management/client-tools/quick-assist#disable-quick-assist&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&lt;/a&gt; &amp;ldquo;Blocking the endpoint will disrupt the functionality of &lt;strong&gt;&lt;em&gt;Remote Help&lt;/em&gt;&lt;/strong&gt;, as it relies on this endpoint for operation.&amp;rdquo;&lt;/p&gt;&#xA;&lt;h4 id=&#34;detection-rules&#34;&gt;Detection Rules&#xA;&lt;/h4&gt;&lt;p&gt;Blocking alone is helpful, but pairing it with detection gives you early warning.&lt;/p&gt;&#xA;&lt;p&gt;After disabling &lt;em&gt;Quick Assist&lt;/em&gt; via a &lt;strong&gt;Microsoft Defender for Endpoint&lt;/strong&gt; URL block indicator, creating a custom detection can help tip you off to suspicious behavior. Sure, you might see the occasional fat-finger hotkey / accidental launch, but you might also catch the start of a vishing attack before it goes any further. That trade-off is usually worth it.&lt;/p&gt;&#xA;&lt;p&gt;You might be wondering why not just check the &lt;em&gt;Create alert&lt;/em&gt; option when configuring the indicator. In my experience, that doesn&amp;rsquo;t work reliably enough to depend on. Instead, creating a custom detection rule through &lt;em&gt;Advanced Hunting&lt;/em&gt; has been far more consistent.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-xdr/custom-detection-rules#1-prepare-the-query&#34;  title=&#34;https://learn.microsoft.com/en-us/defender-xdr/custom-detection-rules#1-prepare-the-query&#34;&#xA;     target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Create custom detection rules in Microsoft Defender XDR - Microsoft Defender XDR&lt;/strong&gt;&#xA;_Learn how to create custom detections rules based on advanced hunting queries._learn.microsoft.com&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-xdr/custom-detection-rules#1-prepare-the-query&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Below is a simple example query that looks for blocked connection attempts to the &lt;em&gt;Quick Assist&lt;/em&gt; endpoint, where the initiating process contains &lt;code&gt;quickassist.exe&lt;/code&gt;:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &#xA;    &lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;DeviceEvents &#xA;| where ActionType == &amp;quot;ExploitGuardNetworkProtectionBlocked&amp;quot; &#xA;| where RemoteUrl contains &amp;quot;remoteassistance.support.services.microsoft.com&amp;quot; &#xA;| where InitiatingProcessCommandLine has &amp;quot;quickassist.exe&amp;quot; &#xA;| summarize arg_max(Timestamp, *) by DeviceId &#xA;| project Timestamp, DeviceId, ReportId, DeviceName, RemoteUrl, InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessId, &#x9;ActionType&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Once the query is in place, you can use the &lt;em&gt;Create detection rule&lt;/em&gt; option directly from the KQL window, fill in the required fields, and set an appropriate rule frequency. This gives you visibility into when &lt;em&gt;Quick Assist&lt;/em&gt; is being launched (or abused) in your environment, even though the session itself never succeeds.&lt;/p&gt;&#xA;&lt;p&gt;In my experience, the value of being tipped off to a potential vishing attempt far outweighs the small number of false positives this kind of detection generates.&lt;/p&gt;&#xA;&lt;h3 id=&#34;key-takeaways&#34;&gt;Key Takeaways&#xA;&lt;/h3&gt;&lt;p&gt;Let&amp;rsquo;s wrap this up.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m always a little surprised by how easy it is to gain a victim&amp;rsquo;s trust with something as simple as a display name. There&amp;rsquo;s nothing particularly fancy going on here. Just &amp;ldquo;Help Desk&amp;quot;calling at the right moment and sounding plausible enough to gain remote access.&lt;/p&gt;&#xA;&lt;p&gt;Looking back at the two Adams, a few things stand out.&lt;/p&gt;&#xA;&lt;p&gt;First, &lt;strong&gt;maximize the tools you already have, and keep up with how they evolve&lt;/strong&gt;. &lt;em&gt;Microsoft Teams&lt;/em&gt; isn&amp;rsquo;t just messaging and meetings anymore. It&amp;rsquo;s an attack surface, and it&amp;rsquo;s always changing. For security operations, capabilities like user reporting, tenant-level blocking, and improved visibility into call activity didn&amp;rsquo;t meaningfully exist not that long ago. Staying current on what your platform can actually do matters, especially when attackers are happy to take advantage of whatever is least defended.&lt;/p&gt;&#xA;&lt;p&gt;Second, &lt;strong&gt;training only works if users are empowered to act&lt;/strong&gt;. In both incidents, the users weren&amp;rsquo;t reckless. They were trying to be helpful, and they were fooled. The difference the second time around wasn&amp;rsquo;t intuition, it was having a simple, familiar way to report something that felt off. If you want users to be part of the defense, make the response path easy and predictable so they don&amp;rsquo;t have to guess what to do under pressure.&lt;/p&gt;&#xA;&lt;p&gt;Third, &lt;strong&gt;be honest about what didn&amp;rsquo;t go as planned and improve it&lt;/strong&gt;. This part is important. In the first incident, &lt;em&gt;Quick Assist&lt;/em&gt; was blocked, but silent. That wasn&amp;rsquo;t a failure, but it was a missed opportunity. Instead of ignoring it, we adjusted and turned that quiet block event into usable signal the next time around.&lt;/p&gt;&#xA;&lt;p&gt;Finally, &lt;strong&gt;don&amp;rsquo;t wait for perfect detection from a single tool&lt;/strong&gt;. No one alert told this story end to end. Some signal came from the IPS. Some came from audit logs. Some came from users. Each piece on its own was incomplete, but together it was enough to understand scope, confirm access, and respond.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s really the point of this whole post. Defending against these attacks is hard. You need visibility where you can get it, the knowledge to act on what you see, and a willingness to close the gaps when you stumble.&lt;/p&gt;&#xA;&lt;p&gt;Thanks for reading!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;240px&#34; data-flex-grow=&#34;100&#34; height=&#34;250&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-teams-call-compromise/897587ce48e9f9feb186cdd21a12ccdd_MD5.png&#34; width=&#34;250&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;references&#34;&gt;References:&#xA;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Security Operations Guide for Teams protection in Microsoft Defender for Office 365:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/mdo-support-teams-sec-ops-guide#enable-secops-to-hunt-for-threats-and-detections-in-microsoft-teams&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/defender-office-365/mdo-support-teams-sec-ops-guide#enable-secops-to-hunt-for-threats-and-detections-in-microsoft-teams&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft Learn — User reported settings in Microsoft Teams:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/submissions-teams#turn-off-or-turn-on-user-reporting-of-teams-messages-in-the-defender-portal&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/defender-office-365/submissions-teams#turn-off-or-turn-on-user-reporting-of-teams-messages-in-the-defender-portal&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft Learn — End user reporting for Teams Calling (Preview):&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/microsoftteams/end-user-reporting-teams-calling&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/microsoftteams/end-user-reporting-teams-calling&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cynet — &amp;ldquo;Emerging Threat: Microsoft Teams Vishing Campaign Continues&amp;rdquo;&#xA;:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://www.cynet.com/blog/emerging-threat-microsoft-teams-vishing-campaign-continues/#:~:text=The%20attacker%20contacts%20the%20targeted,to%20Office%20365%20for%20Business&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://www.cynet.com/blog/emerging-threat-microsoft-teams-vishing-campaign-continues/#:~:text=The%20attacker%20contacts%20the%20targeted,to%20Office%20365%20for%20Business&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft Learn — Block domains and addresses in Microsoft Teams using the Tenant Allow/Block List:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-office-365/tenant-allow-block-list-teams-domains-configure&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/defender-office-365/tenant-allow-block-list-teams-domains-configure&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;From Impersonation Calls to Transparent Reporting: Defending the New Front Door of Attacks:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/from-impersonation-calls-to-transparent-reporting-defending-the-new-front-door-o/4503050&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/from-impersonation-calls-to-transparent-reporting-defending-the-new-front-door-o/4503050&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft Learn — Search the audit log:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/purview/audit-search#:~:text=Microsoft%20doesn%27t%20guarantee%20a,commit%20to%20a%20specific%20time&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/purview/audit-search#:~:text=Microsoft%20doesn&amp;rsquo;t%20guarantee%20a,commit%20to%20a%20specific%20time&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft Learn — Audit Log Activities (Teams):&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/purview/audit-log-activities#teams-activities&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/purview/audit-log-activities#teams-activities&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft Learn — Disable Quick Assist within your organization:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/windows/client-management/client-tools/quick-assist#disable-quick-assist-within-your-organization&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/windows/client-management/client-tools/quick-assist#disable-quick-assist-within-your-organization&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Microsoft Learn — Create custom detection rules:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/defender-xdr/custom-detection-rules&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://learn.microsoft.com/en-us/defender-xdr/custom-detection-rules&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;MITRE ATT&amp;amp;CK — Software — Quick Assist (S1209):&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://attack.mitre.org/software/S1209/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://attack.mitre.org/software/S1209/&lt;/a&gt;&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>StumbleSOC Blog Stories  — The Vibe Coding Compromise</title>
            <link>https://stumblesec.com/posts/stumblesoc-blog-stories-the-vibe-coding-compromise/</link>
            <pubDate>Sun, 23 Nov 2025 00:00:00 +0000</pubDate>
            <guid>https://stumblesec.com/posts/stumblesoc-blog-stories-the-vibe-coding-compromise/</guid>
            <description>&lt;img src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-vibe-coding-compromise/63e8b2c7042ee06bcf5ea662298b9f00_MD5.JPG&#34; alt=&#34;Featured image of post StumbleSOC Blog Stories  — The Vibe Coding Compromise&#34; /&gt;&lt;h3 id=&#34;stumblesoc-stories-the-vibe-coding-compromise&#34;&gt;StumbleSOC Stories: The Vibe Coding Compromise&#xA;&lt;/h3&gt;&lt;h4 id=&#34;so-you-vibe-coded-an-app-but-your-dependencies-havemalware&#34;&gt;So, You Vibe Coded an App? (But your Dependencies Have Malware)&#xA;&lt;/h4&gt;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;360px&#34; data-flex-grow=&#34;150&#34; height=&#34;533&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-vibe-coding-compromise/63e8b2c7042ee06bcf5ea662298b9f00_MD5.JPG&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Photo by &lt;a class=&#34;link&#34; href=&#34;https://unsplash.com/@almoya?utm_source=medium&amp;amp;utm_medium=referral&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Aerps.com&lt;/a&gt; on &lt;a class=&#34;link&#34; href=&#34;https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Unsplash&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;introduction&#34;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&#xA;&lt;/h3&gt;&lt;p&gt;This week, I&amp;rsquo;m taking a break from my usual weekly walkthrough format to try something different. This is the first edition of my real world diary series, &lt;strong&gt;StumbleSOC&lt;/strong&gt; &lt;strong&gt;Stories&lt;/strong&gt;: &lt;em&gt;A collection of field notes and anecdotes&lt;/em&gt;. This particular case is adapted from a short presentation I gave to a team of software developers about a real-world incident back in &lt;strong&gt;July 2025&lt;/strong&gt; meant as a cautionary tale that bridges &lt;strong&gt;blue team&lt;/strong&gt; operations, &lt;strong&gt;DevOps&lt;/strong&gt;, and the rise of &lt;strong&gt;vibe coding&lt;/strong&gt; with &lt;strong&gt;open source software supply chain attacks.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ll take an inside-out approach, exploring how a security alert investigation lead to stumbling upon a &lt;em&gt;software supply chain&lt;/em&gt; compromise. But what&amp;rsquo;s the catch? Well, the malware was delivered through &lt;strong&gt;AI-generated code&lt;/strong&gt; created using a &lt;strong&gt;Generative AI&lt;/strong&gt; tool outside of corporate governance policies, creating a perfect opportunity for risk.&lt;/p&gt;&#xA;&lt;p&gt;This blog is especially relevant for those new to coding who rely on &lt;em&gt;vibe coding&lt;/em&gt; — experimenting with &lt;em&gt;GenAI&lt;/em&gt; prompt-based coding and trusting the output without fully understanding the implications. The goal here is to illustrate how quickly curiosity can turn into compromise with a brief look from a network defender&amp;rsquo;s point of view, and some practical tips to prevent something like this from happening to you.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-alert-that-started-itall&#34;&gt;The Alert That Started It All&#xA;&lt;/h3&gt;&lt;p&gt;This story starts as all good stories do — a hot summer&amp;rsquo;s day and a high-severity incident firing from a newly onboarded user&amp;rsquo;s device:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;&lt;em&gt;Potential hands-on-keyboard pre-ransom activity detected&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;It&amp;rsquo;s enough to make the hairs on the back of any defender&amp;rsquo;s neck stick up, and that&amp;rsquo;s what kicked off the triage. Three alerts, one incident, and a suspicious file: &lt;code&gt;node-gyp.dll&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;While this file was tagged as malware, at first glance, it looked like a false positive. Nothing overtly suspicious was observed, and &lt;a class=&#34;link&#34; href=&#34;https://virustotal.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;VirusTotal&lt;/strong&gt;&lt;/a&gt; showed low detection rates.&lt;/p&gt;&#xA;&lt;p&gt;But something was strange: this workstation belonged to a new, non-developer user, we&amp;rsquo;ll call him &amp;ldquo;&lt;em&gt;Justin&lt;/em&gt;,&amp;rdquo;&#xA;and the DLL was linked to the package &lt;code&gt;napi-postinstall&lt;/code&gt; — a &lt;strong&gt;Node.js&lt;/strong&gt; package with millions of downloads and favorable metrics.&lt;/p&gt;&#xA;&lt;p&gt;What was &amp;ldquo;Justin&amp;rdquo; doing with &lt;em&gt;Node.js&lt;/em&gt; anyway?&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-aistumble&#34;&gt;&lt;strong&gt;The AI Stumble&lt;/strong&gt;&#xA;&lt;/h3&gt;&lt;p&gt;Further investigation led to an interview with &amp;ldquo;Justin&amp;rdquo;, and that&amp;rsquo;s when it clicked:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&amp;ldquo;I&amp;rsquo;m really REALLY ignorant about this stuff. I was messing with it to try and learn more about coding and Ai prompting.&amp;ldquo;Translation: &lt;strong&gt;Vibe coding&lt;/strong&gt;. This is the currently trending practice of using &lt;em&gt;Generative AI&lt;/em&gt; to generate code or prompt an app into existence. This user had used their personal &lt;em&gt;Generative AI&lt;/em&gt; chat subscription to generate &lt;em&gt;Node.js&lt;/em&gt; code with the goal of learning to code and experiment with &lt;strong&gt;AI&lt;/strong&gt; prompting.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;While this is a totally valid use case on its own, you can probably guess where this is going. Once run, the &lt;em&gt;AI-generated code&lt;/em&gt; pulled dependencies from the &lt;strong&gt;NPM registry&lt;/strong&gt;. One of those was the &lt;code&gt;napi-postinstall&lt;/code&gt; script, which contained instructions to execute the suspicious &lt;code&gt;node-gyp.dll&lt;/code&gt;. The user ran the code on their corporate device, and that&amp;rsquo;s when the alerts fired.&lt;/p&gt;&#xA;&lt;h3 id=&#34;malware-or-misunderstanding&#34;&gt;&lt;strong&gt;Malware or Misunderstanding?&lt;/strong&gt;&#xA;&lt;/h3&gt;&lt;p&gt;Okay, so we now understand the &lt;em&gt;how&lt;/em&gt;, but &lt;em&gt;why&lt;/em&gt; did the endpoint detection tool flag &lt;code&gt;node-gyp.dll&lt;/code&gt; as malicious?&lt;/p&gt;&#xA;&lt;p&gt;Remember, &lt;em&gt;VirusTotal&lt;/em&gt; showed minimal detections at the time of the alert. The package looked clean. But the next day, the detection rate skyrocketed as reports started rolling in overnight — there was even a CVE assigned (&lt;a class=&#34;link&#34; href=&#34;https://nvd.nist.gov/vuln/detail/CVE-2025-54313&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;CVE-2025-54313&lt;/strong&gt;&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update — January 2026:&lt;/strong&gt; This CVE has also been added to &lt;em&gt;CISA&amp;rsquo;s Known Exploited Vulnerabilities Catalog&lt;/em&gt; as of January 22nd, 2026.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img class=&#34;gallery-image&#34; data-flex-basis=&#34;853px&#34; data-flex-grow=&#34;355&#34; height=&#34;225&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://stumblesec.com/posts/stumblesoc-blog-stories-the-vibe-coding-compromise/9142a64c69e2526e8f9885b1594a9acb_MD5.png&#34; width=&#34;800&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;VirusTotal: &lt;a class=&#34;link&#34; href=&#34;https://www.virustotal.com/gui/file/c68e42f416f482d43653f36cd14384270b54b68d6496a8e34ce887687de5b441/detection&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://www.virustotal.com/gui/file/c68e42f416f482d43653f36cd14384270b54b68d6496a8e34ce887687de5b441/detection&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;From the excellent reporting by &lt;a class=&#34;link&#34; href=&#34;https://socket.dev/blog/npm-phishing-campaign-leads-to-prettier-tooling-packages-compromise&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Socket.dev&lt;/strong&gt;&lt;/a&gt;, it was revealed that this &lt;strong&gt;DLL&lt;/strong&gt; was part of a broader campaign. A phishing attack had compromised an NPM maintainer&amp;rsquo;s token, allowing attackers to inject malware into several trusted packages, including the one found on Justin&amp;rsquo;s workstation: &lt;code&gt;napi-postinstall&lt;/code&gt; version &lt;code&gt;0.3.1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In other words, textbook &lt;strong&gt;software&lt;/strong&gt; &lt;strong&gt;supply chain attack&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;meetthemalware-the-scavenger-family&#34;&gt;&lt;strong&gt;Meet the Malware: The Scavenger Family&lt;/strong&gt;&#xA;&lt;/h3&gt;&lt;p&gt;Understanding that this was a &lt;strong&gt;true positive&lt;/strong&gt; meant getting a better understanding of the malware. According to the &lt;em&gt;VirusTotal&lt;/em&gt; family label, this confirmed-malicious &lt;strong&gt;DLL&lt;/strong&gt;, &lt;code&gt;node-gyp.dll&lt;/code&gt;, belongs to the &lt;strong&gt;Scavenger&lt;/strong&gt; malware family. According to &lt;a class=&#34;link&#34; href=&#34;https://malpedia.caad.fkie.fraunhofer.de/details/win.scavenger&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Malpedia&lt;/strong&gt;&lt;/a&gt;, &lt;em&gt;Scavenger&lt;/em&gt; is:&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;A stealthy, two-stage malware family first observed in July 2025 following a targeted supply chain attack on the NPM ecosystem. The infection began with a phishing campaign that leveraged a typo-squatted domain (npnjs.com) to impersonate the legitimate NPM login page.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;So, what we observed was the &lt;em&gt;Scavenger Loader&lt;/em&gt; component. In this case, thanks to the endpoint detection response (EDR) tool on the victim&amp;rsquo;s device, the sensor flagged the behavior of the &lt;em&gt;first-stage&lt;/em&gt; &lt;em&gt;loader&lt;/em&gt; (&lt;code&gt;node-gyp.dll&lt;/code&gt;) triggered via &lt;code&gt;rundll32.exe&lt;/code&gt; as suspicious.&lt;/p&gt;&#xA;&lt;p&gt;Then the &lt;em&gt;antivirus software&lt;/em&gt; identified the malicious &lt;em&gt;Scavenger&lt;/em&gt; DLL as malware and terminated it during execution, preventing the second-stage infostealer payload from being retrieved. The threat was quarantined, and no data collection or exfiltration occurred.&lt;/p&gt;&#xA;&lt;p&gt;While this is a great example of behavioral detection working as intended, even when signature-based detection lagged behind, it&amp;rsquo;s also a great example of how &lt;em&gt;technical controls&lt;/em&gt; are essential even when the &lt;em&gt;administrative policy controls&lt;/em&gt; (like an Acceptable Use Policy) should have deterred this from happening to begin with.&lt;/p&gt;&#xA;&lt;p&gt;Yes, the user &lt;em&gt;technically&lt;/em&gt; executed the code but is it really their fault or simply bad timing that created another victim downstream?&lt;/p&gt;&#xA;&lt;h3 id=&#34;understanding-the-open-source-software-supply-chainrisk&#34;&gt;&lt;strong&gt;Understanding the Open Source Software Supply Chain Risk&lt;/strong&gt;&#xA;&lt;/h3&gt;&lt;p&gt;Let&amp;rsquo;s pull back a little and look at the bigger picture. Modern applications rely on hundreds of &lt;strong&gt;third-party dependencies&lt;/strong&gt;. Even if you&amp;rsquo;re confident your code (or your &lt;em&gt;AI-generated code&lt;/em&gt;) is safe, your &lt;em&gt;dependencies&lt;/em&gt; might not be. And when those &lt;em&gt;dependencies&lt;/em&gt; are compromised, the impact can cascade downstream, which is exactly what we saw earlier happen with our victim, &amp;ldquo;Justin&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;The risk is that supply chain attacks aren&amp;rsquo;t just about initial access. They&amp;rsquo;re about the attacker&amp;rsquo;s objectives and impact. A few examples might include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Stealing cloud service keys, SSH credentials, and maintainer tokens.&lt;/li&gt;&#xA;&lt;li&gt;Dropping backdoors.&lt;/li&gt;&#xA;&lt;li&gt;Lateral movement in enterprise networks.&lt;/li&gt;&#xA;&lt;li&gt;Data theft and ransomware.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Not good, but the worst part? A story like this isn&amp;rsquo;t an isolated incident. A quick search for &amp;ldquo;Software Supply Chain Attack&amp;quot;shows dozens of results per week across multiple &lt;strong&gt;package repositories&lt;/strong&gt; like &lt;em&gt;NPM&lt;/em&gt; or &lt;strong&gt;PyPI&lt;/strong&gt;. Despite this being an example from July 2025, this is still an ongoing, pervasive, and real threat.&lt;/p&gt;&#xA;&lt;h3 id=&#34;so-what-can-wedo&#34;&gt;&lt;strong&gt;So, What Can We Do?&lt;/strong&gt;&#xA;&lt;/h3&gt;&lt;p&gt;Let&amp;rsquo;s tie this together and come up with some practical advice — especially for new developers or &lt;em&gt;vibe-coding&lt;/em&gt; hobbyists like Justin.&lt;/p&gt;&#xA;&lt;h4 id=&#34;for-vibecoders&#34;&gt;For Vibe Coders:&#xA;&lt;/h4&gt;&lt;p&gt;If you&amp;rsquo;re new to software development and rely on &lt;em&gt;vibe coding&lt;/em&gt; as your entry point, remember this: &lt;strong&gt;AI&lt;/strong&gt; &lt;strong&gt;doesn&amp;rsquo;t guarantee security&lt;/strong&gt;. It can pull in compromised packages without warning, just like the victim in this story. So how does a novice developer verify the integrity of &lt;em&gt;AI-generated code&lt;/em&gt;?&lt;/p&gt;&#xA;&lt;p&gt;While it&amp;rsquo;s a tough nut to crack, and I don&amp;rsquo;t have all the answers, we can start with some basics. There&amp;rsquo;s an old cybersecurity adage: &amp;ldquo;&lt;em&gt;You can&amp;rsquo;t defend what you don&amp;rsquo;t know exists.&lt;/em&gt;&amp;rdquo; In this example, it&amp;rsquo;s true.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Start with some Operational Security Fundamentals&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t assume AI-generated code is safe. AI can pull in dependencies without context. There&amp;rsquo;s a reason these tools call out that they can make mistakes. Always verify.&lt;/li&gt;&#xA;&lt;li&gt;Separate your learning environment from your daily driver. If you&amp;rsquo;re experimenting, use a &lt;strong&gt;Virtual Machine&lt;/strong&gt; or segmented development environment — not your organization&amp;rsquo;s resources.&lt;/li&gt;&#xA;&lt;li&gt;Stay within approved tools and environments. Governance exists for a reason. If your organization has an approved &lt;em&gt;GenAI&lt;/em&gt; application, they probably have some guardrails in place.&lt;/li&gt;&#xA;&lt;li&gt;Never tamper with your anti-malware or security software. Yes, I&amp;rsquo;ve seen this happen, but those tools and alerts saved the day in this case and prevented further impact.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Know Your Dependencies&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;For &lt;em&gt;Node.js&lt;/em&gt; applications, use &lt;code&gt;npm ls&lt;/code&gt; to list dependencies and &lt;code&gt;[npm audit](https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities)&lt;/code&gt; to check for known &lt;strong&gt;vulnerabilities&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Investigate suspicious findings by looking up packages on sites like &lt;a class=&#34;link&#34; href=&#34;https://socket.dev/npm/package/napi-postinstall&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Socket.dev&lt;/strong&gt;&lt;/a&gt; or &lt;a class=&#34;link&#34; href=&#34;https://snyk.io/advisor/npm-package/napi-postinstall&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;Snyk&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;In this example, tools like these would have flagged &lt;code&gt;napi-postinstall&lt;/code&gt; as compromised. Only version &lt;code&gt;0.3.1&lt;/code&gt; was affected, but that information was available if the victim had known where to look.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Scale Up with Security Tools&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;While manual checks help, they&amp;rsquo;re not scalable. Eventually, you&amp;rsquo;ll want to integrate:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Software Composition Analysis (SCA)&lt;/strong&gt; tools like &lt;a class=&#34;link&#34; href=&#34;https://owasp.org/www-project-dependency-check/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;strong&gt;OWASP Dependency-Check&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Static Application Security Testing (SAST)&lt;/strong&gt; for &lt;strong&gt;source code analysis&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dynamic Application Security Testing&lt;/strong&gt; (&lt;strong&gt;DAST&lt;/strong&gt;) for &lt;strong&gt;runtime vulnerability detection&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;key-takeaways&#34;&gt;Key Takeaways&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;Verify AI-generated code: don&amp;rsquo;t trust it blindly.&lt;/li&gt;&#xA;&lt;li&gt;Separate experimental environments from production systems.&lt;/li&gt;&#xA;&lt;li&gt;Use dependency checks (&lt;code&gt;npm ls&lt;/code&gt;, &lt;code&gt;npm audit&lt;/code&gt;) and reputation tools.&lt;/li&gt;&#xA;&lt;li&gt;Adopt SCA and SAST tools as you grow.&lt;/li&gt;&#xA;&lt;li&gt;Never disable security tools. They&amp;rsquo;re your last line of defense.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;final-thoughts&#34;&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&#xA;&lt;/h3&gt;&lt;p&gt;This saga reminded me how quickly a learning experiment can become a &lt;strong&gt;security incident&lt;/strong&gt;. Awareness is important! Understand that there is risk in the trust-based open source ecosystem. Maintainers are not infallible. With that said, there is obvious value in using &lt;em&gt;GenAI&lt;/em&gt; to learn about building applications, and harnessing that power can bring tremendous results. AI is powerful, but it&amp;rsquo;s also not infallible. And when it intersects with &lt;strong&gt;o&lt;/strong&gt;pen-source ecosystems, the risks multiply.&lt;/p&gt;&#xA;&lt;p&gt;But we users also bear the burden of validating the output of these tools and the risks. Just like in standard software development lifecycles, it&amp;rsquo;s important to move security early into the development of new applications and always be thinking about it as much as you think about the final result. Applying security principles like &lt;em&gt;software composition analysis&lt;/em&gt; and &lt;em&gt;vulnerability management&lt;/em&gt; is important, fundamentally important, even if you&amp;rsquo;re new. Security is a vibe too.&lt;/p&gt;&#xA;&lt;p&gt;This is just a small slice of the bigger pie, and I hope it gave you something to chew on. Thanks for your support and for your time together. If you found this post interesting, don&amp;rsquo;t forget to give it a clap and consider following me for more content like this! Your feedback really is invaluable, and it pumps me up to support your security journey. Remember, Cybersecurity is a team sport and we&amp;rsquo;re in this together!&lt;/p&gt;&#xA;&lt;p&gt;I also want to give a quick shout-out to my colleague &lt;a class=&#34;link&#34; href=&#34;https://medium.com/u/609b9236eebf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Giovanni Contino&lt;/a&gt; for generously lending his time — and his developer brain — to review this post. His insights and feedback helped ground the content in real-world dev experience.&lt;/p&gt;&#xA;&lt;p&gt;Until next week — stay curious and be safe out there!&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;references&#34;&gt;&lt;strong&gt;References&lt;/strong&gt;&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Socket — &amp;quot; # &amp;ldquo;Active Supply Chain Attack: npm Phishing Campaign Leads to Prettier Tooling Packages Compromise&amp;rdquo;:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://socket.dev/blog/npm-phishing-campaign-leads-to-prettier-tooling-packages-compromise&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://socket.dev/blog/npm-phishing-campaign-leads-to-prettier-tooling-packages-compromise&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;VirusTotal — node-gyp.dll:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://www.virustotal.com/gui/file/c68e42f416f482d43653f36cd14384270b54b68d6496a8e34ce887687de5b441/detection&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://www.virustotal.com/gui/file/c68e42f416f482d43653f36cd14384270b54b68d6496a8e34ce887687de5b441/detection&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;National Vulnerability Database (NVD) — CVE-2025€“54313&lt;/strong&gt;: &lt;a class=&#34;link&#34; href=&#34;https://nvd.nist.gov/vuln/detail/CVE-2025-54313&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://nvd.nist.gov/vuln/detail/CVE-2025-54313&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Malpedia — Scavenger:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://malpedia.caad.fkie.fraunhofer.de/details/win.scavenger&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://malpedia.caad.fkie.fraunhofer.de/details/win.scavenger&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NPM Audit:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Snyk Advisor:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://snyk.io/advisor&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://snyk.io/advisor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Socket:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://socket.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://socket.dev/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;OWASP Dependency-Check:&lt;/strong&gt; &lt;a class=&#34;link&#34; href=&#34;https://owasp.org/www-project-dependency-check/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://owasp.org/www-project-dependency-check/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</description>
        </item></channel>
</rss>
