Weekly Security Roundup: Identity-First Defaults and Faster Triage
This week's security updates focused on making controls easier to apply consistently at scale across GitHub and Azure DevOps, while threat research highlighted how attackers abuse collaboration tools and OS-native scripting. The broader direction continues toward identity-first access (OIDC, Workload Identity, Entra) to remove long-lived secrets, plus guidance for AI incident response and cryptographic readiness. It continues last week's theme: reduce ambient privilege, tighten trust boundaries, and make secure defaults workable, whether through tokenless CI/CD, org-wide scanning baselines, or faster containment when users are socially engineered into granting access.
GitHub supply chain and code security: OIDC, registries, SBOMs, and better triage mechanics
GitHub security platform changes reduce per-repo one-off configuration and improve org-wide operations. Building on last week's workload identity direction (for example, npm Trusted Publishing OIDC expansion), orgs can now configure multiple private registries per ecosystem (npm, Maven, NuGet, Docker, pip, RubyGems, and others) at the organization security settings level. This removes the previous “one registry per ecosystem” limit and reduces repo-by-repo workarounds. GitHub also added OIDC auth for org-level private registries (via REST API too), enabling Dependabot and code scanning dependency resolution to use short-lived federated credentials instead of stored secrets. Initial integrations include Azure DevOps Artifacts, AWS CodeArtifact, and JFrog Artifactory. Together, these changes match last week's “operate it well” direction: fewer secrets and less per-repo drift.
Code scanning moved closer to normal workflow with a new public preview that lets teams link code scanning alerts to GitHub Issues, with bidirectional navigation (alert “Tracking” section, issue “Security alerts” section). New has:tracking and no:tracking filters (including in Security Campaigns) help enforce hygiene such as “every actionable alert has a work item” without building custom dashboards.
SBOM exports from Dependency Graph are now asynchronous, which avoids the previous 10-second timeout on large repos. API users must switch to a two-step flow: GET /repos/{owner}/{repo}/dependency-graph/sbom/generate-report returns a {sbom-uuid}, then poll GET /repos/{owner}/{repo}/dependency-graph/sbom/fetch-report/{sbom-uuid} (HTTP 201 while processing, HTTP 302 redirect when ready). This matters for CI/inventory pipelines that previously retried and triggered duplicate backend work, matching last week's push toward more predictable automation at scale.
Detection and prioritization also improved. CodeQL 2.25.2 adds Kotlin support up to 2.3.20, reduces false positives in Java/Kotlin, C/C++, and C#, and updates @security-severity scoring. Notably, multiple XSS queries moved from 6.1 (medium) to 7.8 (high) across languages, and several log injection queries dropped from high to medium (Rust log injection rose from low to medium). If you gate builds or triage by severity, scoring shifts can reorder backlogs. This pairs with last week's org-wide reporting message: reprioritization helps only if teams notice it.
GitHub also continues emphasizing what is actually running, extending last week's runtime-context integration (Dynatrace). Repository properties now include deployable and deployed signals from artifact/deployment metadata, which can help target rulesets and branch protection to repos that ship. Dependabot and code scanning alerts now show runtime risk context on alert pages so teams can treat “in prod” differently than “dormant.”
- Dependabot and code scanning: Org-level private registries
- OIDC support for Dependabot and code scanning
- Link code scanning alerts to GitHub Issues (public preview)
- SBOM exports are now computed asynchronously
- CodeQL 2.25.2 adds Kotlin 2.3.20 support and other updates
- Deployment context in repository properties and alerts
GitHub secret scanning and rapid exposure baselining
Secret scanning updates combined new detections, tighter enforcement (notably for fork-heavy enterprises), and API improvements for large-scale automation. This continues last week's operational thread around secret scanning APIs/webhooks and delegated visibility, with an emphasis on consistent automation and audit trails instead of manual chasing.
Detection expanded with Cloudflare partner patterns: cloudflare_account_api_token, cloudflare_global_user_api_key, cloudflare_user_api_token. Push protection defaults expanded too: when secret scanning is enabled (including free public repos), additional patterns now block commits by default, including Cloudflare tokens and types like figma_scim_token, google_gcp_api_key_bound_service_account, langsmith_license_key, langsmith_scim_bearer_token, openvsx_access_token, and posthog_personal_api_key. This reinforces last week's “default guardrails” approach where default-on reduces reliance on repo owners remembering settings.
For Enterprise Managed Users (EMU), push protection now follows the fork ancestor chain: if any repo in the hierarchy has push protection enabled, forks inherit it. This closes a gap where secrets could leak through forks created outside licensed contexts.
REST API improvements support internal tooling at scale:
- Custom pattern alert
validitycan now be set viaPATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}(active,inactive, ornull), and overrides appear in UI, webhooks, and audit logs. - Alert list APIs add
providerandprovider_slug, plusproviders/exclude_providersfilters (mutually exclusive; both returns HTTP 422), enabling routing by issuer. - Scan history adds AI-powered generic secret backfill via
generic_secrets_backfill_scans. - Enterprise reporting adds
GET /enterprises/{enterprise}/dismissal-requests/secret-scanningfor centralized dismissal-request oversight. GitHub also introduced a free Code Security Risk Assessment for org admins/security managers on GitHub Enterprise Cloud and GitHub Team. It runs a one-click CodeQL scan across up to 20 most active repos, shows results by severity/language/rule, highlights most vulnerable repos, and notes Copilot Autofix eligibility to connect discovery to remediation. GitHub says Actions minutes don't count against org quota, which reduces baseline cost. This builds on last week's org-level risk assessment reporting by making it easier to start with a baseline and manage remediation via reporting/tracking rather than spreadsheets. - Secret scanning pattern updates and product improvements
- How exposed is your code? Find out in minutes—for free
Azure DevOps Advanced Security: default CodeQL setup and org-wide alert coordination
Azure DevOps Advanced Security focused on making CodeQL adoption and triage less pipeline-centric and more centrally managed. In public preview, CodeQL default setup provides one-click enablement at repo/project/org scope, removing the need to author and maintain Azure Pipelines YAML, install CodeQL tasks, wire builds, and keep configuration current. With default setup, scans run automatically on a schedule adjustable at org level. This mirrors GitHub's direction: centralized controls that are easier to audit and harder to forget. A key control is setting which agent pool runs scanning jobs via org-level repo settings, which helps with network/compliance boundaries and capacity management. The updated combined alerts experience in Security Overview adds an org-wide view (default branch across repos) and security campaigns: shareable, filtered alert views that stay live as new matching findings arrive. This matches last week's org-level reporting theme (and this week's GitHub tracking mechanics): central visibility plus consistent workflows is what makes “fix across the estate” feasible when queries or CVEs reshuffle priorities.
Threat research: social engineering via Teams/Quick Assist and macOS AppleScript tradecraft
Two research writeups reinforced a recurring defender reality: attackers abuse legitimate workflows (collaboration, remote help, scripting) and then move quickly into hands-on-keyboard activity using native tooling to blend in. This extends last week's token-focused attack coverage (AiTM, device-code phishing): compromise often comes from trusted UX where users authorize access rather than from password theft.
Microsoft documented a human-operated intrusion chain starting with cross-tenant Microsoft Teams helpdesk impersonation, quickly turning into recon, persistence, lateral movement, and exfiltration. The actor convinces a user to accept Teams contact and approve remote assistance (often Quick Assist), then within 30-120 seconds runs cmd.exe/PowerShell recon. Techniques include DLL side-loading using vendor-signed binaries from user-writable paths (often C:\\ProgramData), registry-stored encrypted config, outbound-HTTPS C2, and lateral movement via WinRM (5985). Exfiltration uses rclone.exe to external cloud storage with tuned parameters. The post includes KQL hunts correlating Teams events with remote-assist launches, detecting signed-host sideload patterns in ProgramData, registry breadcrumbs, and rclone command lines, plus mitigations across Teams external collaboration controls, Safe Links for Teams, ASR rules, WDAC, Conditional Access, and WinRM scoping. Practically, it is the “legitimate workflow abuse” sibling of last week's device-code story: both rely on trusted UX and short windows where containment and revocation playbooks must be fast.
On macOS, Microsoft Threat Intelligence detailed a “Sapphire Sleet” campaign driven mostly by user-initiated execution of lures (for example, compiled AppleScript Zoom SDK Update.scpt) rather than exploits. Tradecraft centers on AppleScript's do shell script running staging like “curl → osascript,” with attacker user agents (mac-cur1...mac-cur5) mapping to stages (AppleScript loaders, ZIP-delivered .app bundles). The chain includes credential theft via a fake password prompt app, exfil via Telegram Bot API, persistence via LaunchDaemons, interactive backdoors opening zsh shells, and a technique to manipulate TCC by copying/modifying ~/Library/Application Support/com.apple.TCC/TCC.db and injecting sqlite rows granting AppleEvents control. The writeup includes IOCs (domains/IPs/paths/hashes) plus Defender XDR/Sentinel KQL hunts for Script Editor spawning curl/osascript, TCC.db changes, suspicious LaunchDaemon creation, Telegram Bot API traffic, and ZIP staging. Alongside last week's router/DNS hijack story, it is a reminder that initial compromise can look like normal user behavior, so hunts often start from downstream process/auth/permission signals.
- Cross‑tenant helpdesk impersonation to data exfiltration: A human-operated intrusion playbook
- Dissecting Sapphire Sleet’s macOS intrusion from lure to compromise
Azure identity-first security patterns: passwordless AKS secret sync and Entra ID for Storage SFTP
Platform guidance continues replacing embedded credentials with identity federation and scoped authorization, with two practical examples. This also ties to last week's managed identity blast-radius guidance: identity-first helps only when scoping and separation are done well.
For AKS, a guide shows syncing secrets from Azure Key Vault into namespaces using External Secrets Operator (ESO) with AKS Workload Identity, avoiding stored client secrets in-cluster. Steps include enabling AKS OIDC issuer + Workload Identity, creating a User-Assigned Managed Identity (UAMI), binding it to a Kubernetes ServiceAccount via a Federated Identity Credential (audience api://AzureADTokenExchange), and granting Azure RBAC read access (often Key Vault Secrets User). ESO uses SecretStore (authType WorkloadIdentity) and ExternalSecret to materialize values into Kubernetes Opaque Secrets, with refreshInterval (example 30s) controlling rotation propagation. Troubleshooting focuses on RBAC scope, federated issuer/subject mismatch, and missing OIDC/workload identity enablement. Last week's “gotcha” still applies: do not reuse the same UAMI broadly. Workload Identity makes token acquisition easier, so identity hygiene (environment separation, narrow RBAC) matters more.
Entra ID integrated auth for Azure Storage SFTP was highlighted as a way to stop managing storage-account local users and instead authenticate via Microsoft Entra ID, authorizing via Storage data-plane RBAC (and optional ABAC conditions). A practical gotcha is that SFTP sessions are token-driven, so token lifetime and refresh behavior affects long transfers and persistent sessions. Validate client behavior before rolling into partner and batch pipelines. This matches last week's AiTM/device-code lessons: token handling (revocation, CAE/session constraints, client refresh behavior) increasingly determines access resilience for both attackers and automation.
- Passwordless AKS Secrets: Sync Azure Key Vault with ESO + Workload Identity
- Entra ID Integrated SFTP
- SFTP Entra ID Integrated Auth #azure #entraid #azurestorage
AI and cryptography readiness: operational playbooks, not just features
Two guidance pieces addressed areas where classic security operations needs adaptation (AI systems and cryptographic readiness), echoing last week's governance/operability theme. Features help most when paired with operating models, observability, and clear ownership. On incident response, Microsoft's “Same fire, different fuel” argues core IR still applies (clear ownership, contain first, calm comms), but AI complicates triage and verification because outputs are probabilistic and harms do not map cleanly to CIA. The practical shift is AI-specific observability: anomalous output patterns, safety/classifier score shifts, spikes in user reports, and behavior changes after model/app updates. It recommends staged remediation: “stop the bleed” in the first hour (disable features, throttle, filters/blocklists), “fan out and strengthen” over 24 hours via automation, and “fix at the source” via classifier/model/guardrail updates, then verify with longer watch periods rather than one-off tests. It also calls out responder wellbeing when investigations involve harmful content. This overlaps with last week's agent governance theme: you need kill switches, clear guardrails, and telemetry to separate abuse, misconfiguration, drift, and toolchain issues. On cryptography, Microsoft outlined building a cryptographic inventory as the basis for cryptographic posture management and post-quantum readiness. The inventory spans certificates/keys, protocols/ciphers, embedded libraries, algorithms referenced in source, secrets/credentials, and hardware-backed crypto, and it is continuous: discover → normalize → assess → prioritize → remediate → monitor for drift. Developer relevance is work you can backlog: use GHAS/CodeQL to find crypto primitives/algorithms, pair with Defender for Endpoint/Vulnerability Management for certificate/component inventory, use Azure Key Vault as a key/secret/cert source of truth, and centralize signals in Microsoft Sentinel to avoid ad hoc ownership. It also complements last week's sovereignty/key-control thread: you cannot govern what you cannot inventory.
- Incident response for AI: Same fire, different fuel
- Building your cryptographic inventory: A customer strategy for cryptographic posture management
Other Security News
GitHub training content moved from prompt-injection basics to tool-using agent scenarios. Season 4 of the GitHub Secure Code Game introduces a vulnerable “ProdBot” with exploit-then-fix levels covering sandbox escape, untrusted web ingestion, MCP server tool connections, persistent memory risks (including poisoning), and multi-agent environments. It is designed for quick Codespaces runs and maps to OWASP agentic-app risks, complementing last week's agent governance and agentic SOC framing with hands-on failure modes.
- Hack the AI agent: Build agentic AI security skills with the GitHub Secure Code Game Microsoft also published a domain-compromise case study showing how Defender XDR predictive shielding (Automatic Attack Disruption) aims to contain high-privilege identities based on exposure signals (for example, credential dumping) before active abuse. The narrative links footholds (IIS web shells, SYSTEM escalation, Mimikatz, NTDS snapshotting, Impacket lateral movement) to the defender “speed gap” versus slow remediation tasks (krbtgt rotation, GPO/ACL cleanup). It fits alongside last week's token/session focus: whether cloud token replay or on-prem credential dumping, advantage comes from fast containment plus practiced revocation/rotation runbooks.
- Containing a domain compromise: How predictive shielding shut down lateral movement