<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: TrustFix</title>
    <description>The latest articles on DEV Community by TrustFix (@trustfix).</description>
    <link>https://dev.to/trustfix</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3856749%2F1fc438c3-e273-4f2f-849b-90fc38d1e473.png</url>
      <title>DEV Community: TrustFix</title>
      <link>https://dev.to/trustfix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/trustfix"/>
    <language>en</language>
    <item>
      <title>80% of GitHub Repos Still Use Static AWS Credentials in 2026</title>
      <dc:creator>TrustFix</dc:creator>
      <pubDate>Sun, 05 Apr 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/trustfix/80-of-github-repos-still-use-static-aws-credentials-in-2026-2odb</link>
      <guid>https://dev.to/trustfix/80-of-github-repos-still-use-static-aws-credentials-in-2026-2odb</guid>
      <description>&lt;p&gt;We scanned 10,000 public GitHub repositories and analyzed 54,767 GitHub Actions workflows that interact with AWS. The goal was simple: understand how the industry is handling the transition from static AWS credentials to OIDC-based authentication in CI/CD pipelines.&lt;/p&gt;

&lt;p&gt;The results are worse than we expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The headline numbers
&lt;/h2&gt;

&lt;p&gt;Out of 54,767 workflows analyzed across 10,000 repositories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;80.7% still use static AWS credentials&lt;/strong&gt; (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY stored as GitHub Secrets)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;19.2% have adopted OIDC&lt;/strong&gt; federation via &lt;code&gt;configure-aws-credentials&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;7.6% have hardcoded IAM role ARNs&lt;/strong&gt; directly in public workflow files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only 13.9% use GitHub environment protection&lt;/strong&gt; rules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;743 repositories are critically vulnerable&lt;/strong&gt; — they have hardcoded role ARNs AND accept &lt;code&gt;pull_request&lt;/code&gt; triggers, making them exploitable via fork-based OIDC token theft&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To put that in context: if you open a pull request against any of those 743 repos, the workflow runs with the base repository's OIDC trust — potentially giving you access to their AWS account.&lt;/p&gt;

&lt;h2&gt;
  
  
  OIDC adoption is growing, but slowly
&lt;/h2&gt;

&lt;p&gt;GitHub Actions added OIDC support in late 2021. AWS followed with &lt;code&gt;configure-aws-credentials&lt;/code&gt; v2. The security benefits are clear: no long-lived secrets, automatic credential rotation, and fine-grained trust policies tied to specific repositories and branches.&lt;/p&gt;

&lt;p&gt;Despite being available for over four years, OIDC adoption across the repositories we scanned sits at roughly a third. The remaining two-thirds rely on static credentials that, if leaked, provide persistent access until manually rotated. Based on workflow creation dates and commit timestamps in our dataset, adoption has been accelerating — but not fast enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  The CRITICAL finding: 743 repos vulnerable to fork-based token theft
&lt;/h2&gt;

&lt;p&gt;This is the most concerning pattern we found. When a repository:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Uses OIDC for AWS authentication&lt;/li&gt;
&lt;li&gt;Has the role ARN hardcoded in a public workflow file&lt;/li&gt;
&lt;li&gt;Accepts &lt;code&gt;pull_request&lt;/code&gt; as a workflow trigger&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;...then anyone who forks the repo and opens a PR can potentially trigger a workflow that assumes the target's AWS IAM role. The attacker doesn't need the role ARN to be secret — it's right there in the YAML file.&lt;/p&gt;

&lt;p&gt;Named repositories in this CRITICAL category include workflow files from &lt;strong&gt;pytorch/pytorch&lt;/strong&gt;, &lt;strong&gt;botpress/botpress&lt;/strong&gt;, &lt;strong&gt;redpanda-data/redpanda&lt;/strong&gt;, &lt;strong&gt;great-expectations/great_expectations&lt;/strong&gt;, &lt;strong&gt;aws/karpenter-provider-aws&lt;/strong&gt;, &lt;strong&gt;h2oai/h2o-llmstudio&lt;/strong&gt;, &lt;strong&gt;webiny/webiny-js&lt;/strong&gt;, &lt;strong&gt;cloudquery/cloudquery&lt;/strong&gt;, and &lt;strong&gt;supabase/supabase&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Yes, you read that correctly. &lt;strong&gt;AWS's own karpenter-provider-aws repository&lt;/strong&gt; has a workflow in this pattern.&lt;/p&gt;

&lt;p&gt;A note on responsible disclosure: All data in this report comes from publicly accessible GitHub repositories analyzed via the GitHub API. We follow responsible disclosure practices and standard 90-day timelines. Organizations mentioned above can contact &lt;a href="mailto:security@trustfix.dev"&gt;security@trustfix.dev&lt;/a&gt; to discuss findings, request additional details, or be excluded from future publications. Our goal is to improve the ecosystem, not to shame individual projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  How role ARNs are exposed
&lt;/h2&gt;

&lt;p&gt;We categorized how repositories reference their AWS role ARNs:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;% of Workflows&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Not visible (secrets/OIDC)&lt;/td&gt;
&lt;td&gt;80.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Secrets reference&lt;/td&gt;
&lt;td&gt;9.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardcoded in YAML&lt;/td&gt;
&lt;td&gt;7.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment variable&lt;/td&gt;
&lt;td&gt;2.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 7.6% with hardcoded ARNs — that's 4,163 workflows across thousands of repositories with their AWS account ID and IAM role name sitting in plain text in a public GitHub repository. Combined with a &lt;code&gt;pull_request&lt;/code&gt; trigger, this is an open door.&lt;/p&gt;

&lt;h2&gt;
  
  
  Environment protection: the forgotten control
&lt;/h2&gt;

&lt;p&gt;GitHub Environments provide a critical security boundary: they require approval before a workflow can access environment secrets, and they restrict the OIDC &lt;code&gt;sub&lt;/code&gt; claim to specific branches. This means even if someone opens a malicious PR, the workflow can't assume a role that requires the &lt;code&gt;production&lt;/code&gt; environment unless an approver explicitly allows it.&lt;/p&gt;

&lt;p&gt;Only &lt;strong&gt;13.9%&lt;/strong&gt; of the workflows we scanned reference a GitHub environment. The other 86.1% have no approval gate between a pull request and AWS credential access.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for your team
&lt;/h2&gt;

&lt;p&gt;If you're using GitHub Actions with AWS, here's what to check:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're still on static credentials:&lt;/strong&gt; You're in the 80.7% majority, but that's not a good place to be. Every secret stored in GitHub is a credential that can be leaked via workflow logs, compromised actions, or repository access changes. Migrate to OIDC — it takes about 15 minutes per repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you've adopted OIDC:&lt;/strong&gt; Good start, but check your trust policy conditions. Use &lt;code&gt;StringEquals&lt;/code&gt; (not &lt;code&gt;StringLike&lt;/code&gt;) for the &lt;code&gt;sub&lt;/code&gt; claim. Scope to specific repos AND branches. Use the immutable &lt;code&gt;repository_id&lt;/code&gt; condition key that AWS added in January 2026 instead of the mutable repository name. Add an &lt;code&gt;environment&lt;/code&gt; condition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you have hardcoded role ARNs:&lt;/strong&gt; Move them to GitHub Secrets immediately. A hardcoded ARN in a public workflow file tells an attacker exactly which AWS account and role to target.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you use &lt;code&gt;pull_request&lt;/code&gt; triggers with OIDC:&lt;/strong&gt; This is the most dangerous combination. Switch to &lt;code&gt;pull_request_target&lt;/code&gt; with explicit checkout controls, or require environment approval before any AWS access in PR workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;p&gt;We used the GitHub Search API to find repositories containing &lt;code&gt;configure-aws-credentials&lt;/code&gt; in their &lt;code&gt;.github/workflows/&lt;/code&gt; directory. For each repository, we fetched all workflow YAML files and analyzed them for credential patterns, OIDC configuration, role ARN exposure, trigger types, and environment usage. The scan covered 10,000 unique repositories across all languages and star counts. All data is from publicly accessible GitHub repositories.&lt;/p&gt;

&lt;h2&gt;
  
  
  The full dataset
&lt;/h2&gt;

&lt;p&gt;We're publishing the complete statistical breakdown as part of our upcoming "State of OIDC Security 2026" report. If you want early access or have questions about the methodology, reach out at &lt;a href="mailto:security@trustfix.dev"&gt;security@trustfix.dev&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can scan your own AWS account for OIDC trust policy misconfigurations at &lt;a href="https://trustfix.dev" rel="noopener noreferrer"&gt;trustfix.dev&lt;/a&gt; — free for the first AWS account, no credit card required.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This research was conducted by TrustFix as part of the State of OIDC Security 2026 initiative. All data is from publicly accessible GitHub repositories analyzed via the GitHub API.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://trustfix.dev/blog/static-credentials-2026" rel="noopener noreferrer"&gt;trustfix.dev&lt;/a&gt;. TrustFix is a non-human identity security platform that detects trust policy misconfigurations and auto-generates validated Terraform fixes. Free CLI: &lt;code&gt;npx oidc-audit scan&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>github</category>
      <category>sre</category>
    </item>
  </channel>
</rss>
