
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Tue, 14 Apr 2026 19:11:06 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Managed OAuth for Access: make internal apps agent-ready in one click]]></title>
            <link>https://blog.cloudflare.com/managed-oauth-for-access/</link>
            <pubDate>Tue, 14 Apr 2026 13:00:10 GMT</pubDate>
            <description><![CDATA[ Managed OAuth for Cloudflare Access helps AI agents securely navigate internal applications. By adopting RFC 9728, agents can authenticate on behalf of users without using insecure service accounts. ]]></description>
            <content:encoded><![CDATA[ <p>We have thousands of internal apps at Cloudflare. Some are things we’ve built ourselves, others are self-hosted instances of software built by others. They range from business-critical apps nearly every person uses, to side projects and prototypes.</p><p>All of these apps are protected by <a href="https://developers.cloudflare.com/cloudflare-one/access-controls/policies/"><u>Cloudflare Access</u></a>. But when we started using and building agents — particularly for uses beyond writing code — we hit a wall. People could access apps behind Access, but their agents couldn’t.</p><p>Access sits in front of internal apps. You define a policy, and then Access will send unauthenticated users to a login page to choose how to authenticate. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3867rU5n4IkRilnfCAvOLD/8ec5ea3c25dbd6620a8644d231893732/BLOG-3146_2.png" />
          </figure><p><sup><i>Example of a Cloudflare Access login page</i></sup></p><p>This flow worked great for humans. But all agents could see was a redirect to a login page that they couldn’t act on.</p><p>Providing agents with access to internal app data is so vital that we immediately implemented a stopgap for our own internal use. We modified OpenCode’s <a href="https://opencode.ai/docs/tools/#webfetch"><u>web fetch tool</u></a> such that for specific domains, it triggered the <a href="https://developers.cloudflare.com/cloudflare-one/tutorials/cli/"><u>cloudflared</u></a> CLI to open an authorization flow to fetch a <a href="https://www.cloudflare.com/learning/access-management/token-based-authentication/"><u>JWT</u></a> (JSON Web Token). By appending this token to requests, we enabled secure, immediate access to our internal ecosystem.</p><p>While this solution was a temporary answer to our own dilemma, today we’re retiring this workaround and fixing this problem for everyone. Now in open beta, every Access application supports managed OAuth. One click to enable it for an Access app, and agents that speak OAuth 2.0 can easily discover how to authenticate (<a href="https://datatracker.ietf.org/doc/html/rfc9728"><u>RFC 9728</u></a>), send the user through the auth flow, and receive back an authorization token (the same JWT from our initial solution). </p><p>Now, the flow works smoothly for both humans and agents. Cloudflare Access has a generous <a href="https://www.cloudflare.com/plans/zero-trust-services/"><u>free tier</u></a>. And building off our newly-introduced <a href="https://blog.cloudflare.com/organizations-beta/"><u>Organizations beta</u></a>, you’ll soon be able to bridge identity providers across Cloudflare accounts too.</p>
    <div>
      <h2>How managed OAuth works</h2>
      <a href="#how-managed-oauth-works">
        
      </a>
    </div>
    <p>For a given internal app protected by Cloudflare Access, you enable managed OAuth in one click:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/79FSFNeaDbqn9DkSyfKrtz/5f0fd06ce9e127c06474263a529ec284/BLOG-3146_3.png" />
          </figure><p>Once managed OAuth is enabled, Cloudflare Access acts as the authorization server. It returns the <code>www-authenticate</code> header, telling unauthorized agents where to look up information on how to get an authorization token. They find this at <code>https://&lt;your-app-domain&gt;/.well-known/oauth-authorization-server</code>. Equipped with that direction, agents can just follow OAuth standards: </p><ol><li><p>The agent dynamically registers itself as a client (a process known as Dynamic Client Registration — <a href="https://datatracker.ietf.org/doc/html/rfc7591"><u>RFC 7591</u></a>), </p></li><li><p>The agent sends the human through a PKCE (Proof Key for Code Exchange) authorization flow (<a href="https://datatracker.ietf.org/doc/html/rfc7636"><u>RFC 7636</u></a>)</p></li><li><p>The human authorizes access, which grants a token to the agent that it can use to make authenticated requests on behalf of the user</p></li></ol><p>Here’s what the authorization flow looks like:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2LkJMuPCNX1Mu7MfEnFinH/fef5cf3f87e83d93c49ffeadbe6aed4d/BLOG-3146_4.png" />
          </figure><p>If this authorization flow looks familiar, that’s because it’s what the <a href="https://modelcontextprotocol.io/specification/"><u>Model Context Protocol (MCP)</u></a> uses. We originally built support for this into our <a href="https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/"><u>MCP server portals</u></a> product, which proxies and controls access to many MCP servers, to allow the portal to act as the OAuth server. Now, we’re bringing this to all Access apps so agents can access not only MCP servers that require authorization, but also web pages, web apps, and REST APIs.</p>
    <div>
      <h2>Mass upgrading your internal apps to be agent-ready</h2>
      <a href="#mass-upgrading-your-internal-apps-to-be-agent-ready">
        
      </a>
    </div>
    <p>Upgrading the long tail of internal software to work with agents is a daunting task. In principle, in order to be agent-ready, every internal and external app would ideally have discoverable APIs, a CLI, a well-crafted MCP server, and have adopted the many emerging agent standards.</p><p>AI adoption is not something that can wait for everything to be retrofitted. Most organizations have a significant backlog of apps built over many years. And many internal “apps” work great when treated by agents as simple websites. For something like an internal wiki, all you really need is to enable <a href="https://blog.cloudflare.com/markdown-for-agents/"><u>Markdown for Agents</u></a>, turn on managed OAuth, and agents have what they need to read protected content.</p><p>To make the basics work across the widest set of internal applications, we use Managed OAuth. By putting Access in front of your legacy internal apps, you make them agent-ready instantly. No code changes, no retrofitting. Instead, just immediate compatibility.</p>
    <div>
      <h2>It’s the user’s agent. No service accounts and tokens needed</h2>
      <a href="#its-the-users-agent-no-service-accounts-and-tokens-needed">
        
      </a>
    </div>
    <p>Agents need to act on behalf of users inside organizations. One of the biggest anti-patterns we’ve seen is people provisioning service accounts for their agents and MCP servers, authenticated using static credentials. These have their place in simple use cases and quick prototypes, and Cloudflare Access supports <a href="https://developers.cloudflare.com/cloudflare-one/access-controls/service-credentials/service-tokens/"><u>service tokens</u></a> for this purpose.</p><p>But the service account approach quickly shows its limits when fine-grained access controls and audit logs are required. We believe that every action an agent performs must be easily attributable to the human who initiated it, and that an agent must only be able to perform actions that its human operator is likewise authorized to do. Service accounts and static credentials become points at which attribution is lost. Agents that launder all of their actions through a service account are susceptible to <a href="https://en.wikipedia.org/wiki/Confused_deputy_problem"><u>confused deputy problems</u></a> and result in audit logs that appear to originate from the agent itself.</p><p>For security and accountability, agents must use security primitives capable of expressing this user–agent relationship. OAuth is the industry standard protocol for requesting and delegating access to third parties. It gives agents a way to talk to your APIs on behalf of the user, with a token scoped to the user’s identity, so that access controls correctly apply and audit logs correctly attribute actions to the end user.</p>
    <div>
      <h2>Standards for the win: how agents can and should adopt RFC 9728 in their web fetch tools</h2>
      <a href="#standards-for-the-win-how-agents-can-and-should-adopt-rfc-9728-in-their-web-fetch-tools">
        
      </a>
    </div>
    <p><a href="https://datatracker.ietf.org/doc/html/rfc9728"><u>RFC 9728</u></a> is the OAuth standard that makes it possible for agents to discover where and how to authenticate. It standardizes where this information lives and how it’s structured. This RFC became official in April 2025 and was quickly adopted by the Model Context Protocol (MCP), which now <a href="https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization"><u>requires that both MCP servers and clients support it</u></a>.</p><p>But outside of MCP, agents should adopt RFC 9728 for an even more essential use case: making requests to web pages that are protected behind OAuth and making requests to plain old REST APIs.</p><p>Most agents have a tool for making basic HTTP requests to web pages. This is commonly called the <a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool"><u>“web fetch” tool</u></a>. It’s similar to using the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API"><u>fetch()</u></a> API in JavaScript, often with some additional post-processing on the response. It’s what lets you paste a URL into your agent and have your agent go look up the content.</p><p>Today, most agents’ web fetch tools won’t do anything with the <code>www-authenticate</code> header that a URL returns. The underlying model might choose to introspect the response headers and figure this out on its own, but the tool itself does not follow <code>www-authenticate</code>, look up <code>/.well-known/oauth-authorization-server</code>, and act as the client in the OAuth flow. But it <i>can</i>, and we strongly believe it <i>should</i>! Agents already do this to act as remote MCP clients.</p><p>To demonstrate this, we’ve put up a draft pull request that <a href="https://github.com/anomalyco/opencode/pull/22096/"><u>adapts the web fetch tool in Opencode</u></a> to show this in action. Before making a request, the adapted tool first checks whether it already has credentials ; if it does, it uses them to make the initial request. If the tool gets back a 401 or a 403 with a <code>www-authenticate</code> header, it asks the user for consent to be sent through the server’s OAuth flow.</p><p>Here’s how that OAuth flow works. If you give the agent a URL that is protected by OAuth and complies with RFC 9728, the agent prompts the human for consent to open the authorization flow:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1vo4hGtVz7ovlNQslTvTal/3d2b1a861b9342842bd6297e1869aed4/BLOG-3146_5.png" />
          </figure><p>…sending the human to the login page:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3867rU5n4IkRilnfCAvOLD/8ec5ea3c25dbd6620a8644d231893732/BLOG-3146_2.png" />
          </figure><p>…and then to a consent dialog that prompts the human to grant access to the agent:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/39I0yjWXKGLNG4mhV5jEPQ/793559a5f18a04e807939b9560118ccb/BLOG-3146_6.png" />
          </figure><p>Once the human grants access to the agent, the agent uses the token it has received to make an authenticated request:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4e0mNkih5xtbAoQpwBrB32/701089e8ea256804890d45af08ef04ca/BLOG-3146_7.png" />
          </figure><p>Any agent from Codex to Claude Code to Goose and beyond can implement this, and there’s nothing bespoke to Cloudflare. It’s all built using OAuth standards.</p><p>We think this flow is powerful, and that supporting RFC 9728 can help agents with more than just making basic web fetch requests. If a REST API supports RFC 9728 (and the agent does too), the agent has everything it needs to start making authenticated requests against that API. If the REST API supports <a href="https://www.rfc-editor.org/rfc/rfc9727"><u>RFC 9727</u></a>, then the client can discover a catalog of REST API endpoints on its own, and do even more without additional documentation, agent skills, MCP servers or CLIs. </p><p>Each of these play important roles with agents — Cloudflare itself provides an <a href="https://blog.cloudflare.com/code-mode-mcp/"><u>MCP server for the Cloudflare API</u></a> (built using <a href="https://blog.cloudflare.com/code-mode/"><u>Code Mode</u></a>), <a href="https://developers.cloudflare.com/workers/wrangler/commands/"><u>Wrangler CLI</u></a>, and <a href="https://github.com/cloudflare/skills"><u>Agent Skills</u></a>, and a <a href="https://x.com/CloudflareDev/status/2037336582815175122"><u>Plugin</u></a>. But supporting RFC 9728 helps ensure that even when none of these are preinstalled, agents have a clear path forward. If the agent has a <a href="https://blog.cloudflare.com/dynamic-workers/"><u>sandbox to execute untrusted code</u></a>, it can just write and execute code that calls the API that the human has granted it access to. We’re working on supporting this for Cloudflare’s own APIs, to help your agents understand how to use Cloudflare.</p>
    <div>
      <h2>Coming soon: share one identity provider (IdP) across many Cloudflare accounts</h2>
      <a href="#coming-soon-share-one-identity-provider-idp-across-many-cloudflare-accounts">
        
      </a>
    </div>
    <p>At Cloudflare our own internal apps are deployed to dozens of different Cloudflare accounts, which are all part of an Organization — a <a href="https://blog.cloudflare.com/organizations-beta/"><u>newly introduced</u></a> way for administrators to manage users, configurations, and view analytics across many Cloudflare accounts. We have had the same challenge as many of our customers: each Cloudflare account has to separately configure an IdP, so Cloudflare Access uses our identity provider. It’s critical that this is consistent across an organization — you don’t want one Cloudflare account to inadvertently allow people to sign in just with a one-time PIN, rather than requiring that they authenticate via single-sign on (SSO).</p><p>To solve this, we’re currently working on making it possible to share an identity provider across Cloudflare accounts, giving organizations a way to designate a single primary IdP for use across every account in their organization.</p><p>As new Cloudflare accounts are created within an organization, administrators will be able to configure a bridge to the primary IdP with a single click, so Access applications across accounts can be protected by one identity provider. This removes the need to manually configure IdPs account by account, which is a process that doesn’t scale for organizations with many teams and individuals each operating their own accounts.</p>
    <div>
      <h2>What’s next</h2>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>Across companies, people in every role and business function are now using agents to build internal apps, and expect their agents to be able to access context from internal apps. We are responding to this step function growth in internal software development by making the <a href="https://workers.cloudflare.com/"><u>Workers Platform</u></a> and <a href="https://developers.cloudflare.com/cloudflare-one/"><u>Cloudflare One</u></a> work better together — so that it is easier to build and secure internal apps on Cloudflare. </p><p>Expect more to come soon, including:</p><ul><li><p>More direct integration between Cloudflare Access and Cloudflare Workers, without the need to validate JWTs or remember which of many routes a particular Worker is exposed on.</p></li><li><p><a href="https://github.com/cloudflare/workers-sdk/pull/13126"><u>wrangler dev --tunnel</u></a> — an easy way to expose your local development server to others when you’re building something new, and want to share it with others before deploying</p></li><li><p>A CLI interface for Cloudflare Access and the <a href="https://blog.cloudflare.com/cf-cli-local-explorer/"><u>entire Cloudflare API</u></a></p></li><li><p>More announcements to come during Agents Week 2026</p></li></ul>
    <div>
      <h2>Enable Managed OAuth for your internal apps behind Cloudflare Access</h2>
      <a href="#enable-managed-oauth-for-your-internal-apps-behind-cloudflare-access">
        
      </a>
    </div>
    <p>Managed OAuth is now available, in open beta, to all Cloudflare customers. Head over to the <a href="https://dash.cloudflare.com/"><u>Cloudflare dashboard</u></a> to enable it for your Access applications. You can use it for any internal app, whether it’s one built on <a href="https://workers.cloudflare.com/"><u>Cloudflare Workers</u></a>, or hosted elsewhere. And if you haven’t built internal apps on the Workers Platform yet — it’s the fastest way for your team to go from zero to deployed (and protected) in production.</p> ]]></content:encoded>
            <category><![CDATA[Agents Week]]></category>
            <category><![CDATA[Agents]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Zero Trust]]></category>
            <category><![CDATA[SASE]]></category>
            <category><![CDATA[Cloudflare Access]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">6pXy7tbG2SlwZZPQuO14Rq</guid>
            <dc:creator>Eduardo Gomes</dc:creator>
            <dc:creator>James Royal</dc:creator>
            <dc:creator>Ann Ming Samborski</dc:creator>
        </item>
        <item>
            <title><![CDATA[Defeating the deepfake: stopping laptop farms and insider threats]]></title>
            <link>https://blog.cloudflare.com/deepfakes-insider-threats-identity-verification/</link>
            <pubDate>Wed, 04 Mar 2026 06:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare One is partnering with Nametag to combat laptop farms and AI-enhanced identity fraud by requiring identity verification during employee onboarding and via continuous authentication. ]]></description>
            <content:encoded><![CDATA[ <p>Trust is the most expensive vulnerability in modern security architecture. In recent years, the security industry has pivoted toward a <a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/"><u>zero trust model</u></a> for networks — assuming breach and verifying every request. Yet when it comes to the <i>people</i> behind those requests, we often default back to implicit trust. We <i>trust</i> that the person on the Zoom call is who they say they are. We <i>trust</i> that the documents uploaded to an HR portal are genuine.</p><p>That trust is now being weaponized at an unprecedented scale.</p><p>In our <a href="http://blog.cloudflare.com/2026-threat-report"><u>2026 Cloudflare Threat Report</u></a>, we highlight a rapidly accelerating threat vector: the rise of "remote IT worker" fraud. Often linked to nation-states, including North Korea, these are not just individual bad actors. They are organized operations running laptop farms: warehouses of devices remotely accessed by workers using stolen identities to infiltrate companies, steal intellectual property (IP), and funnel revenue illicitly.</p><p>These attackers have evolved and continue to do so with advancements in <a href="https://www.cloudflare.com/learning/ai/what-is-artificial-intelligence/"><u>artificial intelligence (AI)</u></a>. They use <a href="https://www.cloudflare.com/learning/ai/what-is-generative-ai/"><u>generative AI</u></a> to pass interviews and deepfake tools to fabricate flawless government IDs. Traditional background checks and standard <a href="https://www.cloudflare.com/learning/access-management/what-is-an-identity-provider/"><u>identity providers (IdPs)</u></a> are no longer enough. Bad actors are exploiting an <a href="https://www.go.nametag.co/2026-workforce-impersonation-report"><u>identity assurance gap</u></a>, which exists because most zero trust onboarding models verify devices and credentials, not people.</p><p>To close this gap, Cloudflare is partnering with <a href="https://getnametag.com/"><u>Nametag</u></a>, a pioneer in workforce identity verification, to bring identity-verified onboarding and continuous identity assurance to our SASE platform, <a href="https://developers.cloudflare.com/cloudflare-one/"><u>Cloudflare One</u></a>.</p>
    <div>
      <h3>Your biggest insider threat was scheming from the start</h3>
      <a href="#your-biggest-insider-threat-was-scheming-from-the-start">
        
      </a>
    </div>
    <p>The challenge with insider risk is that companies naturally want to trust their employees. By the time malicious actors are detected by traditional <a href="https://www.cloudflare.com/learning/access-management/what-is-dlp/"><u>data loss prevention (DLP)</u></a> or <a href="https://www.cloudflare.com/learning/security/what-is-ueba/"><u>user entity behavior analytics (UEBA)</u></a> tools, they are already inside the perimeter. They have valid credentials, a corporate laptop, and access to sensitive repositories.</p><p>The "remote IT worker" scheme exploits the gap between <i>hiring</i> and <i>onboarding</i>. Attackers use stolen or fabricated identities to get hired. Once the laptop is shipped to a "mule" address (typically a domestic laptop farm located in the country of the remote worker’s alleged employment), it is racked and connected to a keyboard, video, and mouse (KVM) switch. The remote actor then logs in via VPN (or perhaps remote desktop), appearing to be a legitimate employee.</p><p>Because the credentials are valid and the device is corporate-issued, standard <a href="https://www.cloudflare.com/learning/access-management/what-is-ztna/"><u>zero trust network access (ZTNA)</u></a> policies often see this traffic as "safe" — when in fact it’s an enormous risk to your business.</p>
    <div>
      <h3>Enter identity-verified zero trust</h3>
      <a href="#enter-identity-verified-zero-trust">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/zero-trust/products/access/"><u>Cloudflare Access</u></a> already serves as the aggregation layer for your <a href="https://developers.cloudflare.com/cloudflare-one/access-controls/policies/"><u>security policies</u></a> — checking attributes such as device posture, location, and user group membership before granting access to applications, infrastructure, or <a href="https://www.cloudflare.com/learning/ai/what-is-model-context-protocol-mcp/"><u>MCP servers</u></a>. <b>Through our partnership with Nametag, we are adding a critical new layer: workforce identity verification.</b></p><p>Previously, IT departments had no choice but to assume trust throughout the new user onboarding process. They could either ship a laptop to an address provided by the new hire and then send their initial credentials to their personal email, or require them to come in person –– costly and impractical in a world of distributed workforces and contractors. </p><p>Nametag replaces assumed trust with verified identity, ensuring that the person receiving, configuring, and connecting a device to protected resources is a real person, a legitimate person, and the right person throughout the entire process. This integration allows organizations to uncover and stop bad actors, including North Korean IT workers, <i>before</i> they gain access to any internal resources or data.</p>
    <div>
      <h3>How it works</h3>
      <a href="#how-it-works">
        
      </a>
    </div>
    <p>Nametag is integrated using <a href="https://openid.net/developers/discover-openid-and-openid-connect/"><u>OpenID Connect</u></a> (OIDC). You can configure it as an IdP within Cloudflare Access or chain it as an external evaluation factor alongside your primary identity provider (like Okta or Microsoft Entra ID).</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6qMAEp4s6PAD9zEBrbDYMF/dc269f1553141e7ee2b6cf9adb44caa0/image2.png" />
          </figure><p><i>Example of the Cloudflare Access login page prompting for a user to authenticate using Nametag.</i></p><p>Here is an example workflow for a high-security onboarding scenario:</p><ol><li><p><b>Trigger:</b> A new user attempts to access their initial onboarding portal (protected by Cloudflare Access).</p></li><li><p><b>Challenge:</b> Instead of just asking for a username and password, Cloudflare directs the user to Nametag for authentication via OIDC.</p></li><li><p><b>Verification:</b> The user enters their new work email address, then snaps a quick selfie and scans their government-issued photo ID using their phone.</p></li><li><p><b>Attestation:</b> Nametag’s <a href="https://getnametag.com/technology/deepfake-defense"><u>Deepfake Defense</u></a>™ identity verification engine leverages advanced cryptography, biometrics, AI and other features to ensure that the user is both a <i>real</i> person and the <i>right</i> person. Nametag’s technology uniquely prevents bad actors from using deepfake IDs and selfies in sophisticated injection attacks or presentation attacks (e.g., holding up a printed photo).</p></li><li><p><b>Enforcement: </b>If that check is successful, Nametag returns an ID token to Cloudflare to complete the OIDC flow. Cloudflare then grants or denies access to the application based on the user’s identity and the Access policies.</p></li></ol><p>All of this happens before the user can access email, code repositories, or other internal resources.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4z3lwwRE7KIq8655FOB9Dp/f3135a1da5f48360fb457ce88309cd20/image4.png" />
          </figure><p>Verifying your identity with Nametag takes under 30 seconds to complete. No biometrics are stored after this interaction.</p>
    <div>
      <h3>A layered defense</h3>
      <a href="#a-layered-defense">
        
      </a>
    </div>
    <p>This partnership complements Cloudflare’s existing suite of insider threat protections. Today, you can:</p><ul><li><p><b>Scan for data exfiltration</b> using our API-driven <a href="https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/"><u>DLP</u></a>.</p></li><li><p><b>Reduce browsing risk</b> with <a href="https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/"><u>Remote Browser Isolation (RBI)</u></a>.</p></li><li><p><b>Identify shadow IT</b> and detect misconfigurations with our <a href="https://developers.cloudflare.com/cloudflare-one/insights/analytics/shadow-it-discovery/"><u>shadow IT report</u></a> and our <a href="https://developers.cloudflare.com/cloudflare-one/integrations/cloud-and-saas/"><u>Cloud Access Security Broker (CASB</u></a>).</p></li></ul><p>Nametag provides the missing link: identity assurance. It moves us from knowing <i>what</i> account is logging in, to knowing exactly <i>who</i> is behind the keyboard.</p><p>In an era where AI can fake a face and a voice, cryptographic proof of identity is the only way to safely trust your workforce.</p>
    <div>
      <h3>Beyond onboarding: continuous verification</h3>
      <a href="#beyond-onboarding-continuous-verification">
        
      </a>
    </div>
    <p>While stopping bad actors at the door is critical, the threat landscape is dynamic. Legitimate credentials can be sold, and legitimate employees can be compromised.</p><p>To protect against that present and ever-evolving risk, Cloudflare Access now incorporates <a href="https://blog.cloudflare.com/adaptive-access-user-risk-scoring"><u>user risk scores</u></a> so security teams can build context-aware policies. If a user’s risk score suddenly increases from low to high, access can be revoked to any (or all) applications.</p><p>In the future, you’ll be able to enforce step-up verification based on signals such as user risk score, in the middle of an active session. Rather than hitting the “big red button” and potentially disrupting a user who does have a legitimate reason for accessing the production billing system from an usual location, you will instead be able to challenge the user to verify with Nametag or by using Cloudflare’s independent MFA with strong authentication methods. If the user is a session hijacker or a bot, they will be unable to pass these checks. </p><p>This capability will also extend to self-service IT workflows. Password resets and MFA device registration are prime targets for social engineering (e.g., the <a href="https://www.bloomberg.com/news/articles/2023-09-16/mgm-resorts-hackers-broke-in-after-tricking-it-service-desk"><u>MGM Resorts help desk attacks</u></a>). By placing Nametag behind Cloudflare Access for these specific portals, you eliminate the possibility of a support agent being socially engineered into resetting a password for an attacker.</p>
    <div>
      <h3>Defend against the future, now</h3>
      <a href="#defend-against-the-future-now">
        
      </a>
    </div>
    <p>Security cannot rely on assumptions. As AI tools lower the barrier to entry for sophisticated fraud, your defenses must evolve to verify the human element with cryptographic certainty. The "remote IT worker" threat is not a hypothetical scenario—it is an active campaign targeting organizations globally.</p><p>You don't need to overhaul your entire infrastructure to stop it. You can layer these protections on top of your existing IdP and applications immediately.</p><p><b>Cloudflare One is free for up to 50 users</b>, allowing you to pilot identity-verified onboarding flows or protect high-risk internal portals right now.</p><ul><li><p><b>Get started:</b> <a href="https://dash.cloudflare.com/sign-up/zero-trust"><u>Sign up</u></a> for Cloudflare One to begin building your policy engine.</p></li><li><p><b>Deploy the integration:</b> Follow the <a href="https://getnametag.com/docs/cloudflare/"><u>step-by-step guide</u></a> to connect Nametag to Cloudflare Access in minutes.</p></li><li><p><b>Understand the risk:</b> Read the full <a href="http://blog.cloudflare.com/2026-threat-report"><u>Cloudflare Threat Report</u></a> to see the data behind the rise in insider threats and AI impersonation.</p></li></ul><p>Don't wait for a breach to verify your workforce. Start implementing a SASE architecture that trusts nothing — not even the face on the screen — without verification.</p> ]]></content:encoded>
            <category><![CDATA[SASE]]></category>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Access]]></category>
            <category><![CDATA[Cloudflare Access]]></category>
            <category><![CDATA[Partners]]></category>
            <guid isPermaLink="false">iteras2eloIu0LJ7zULaP</guid>
            <dc:creator>Ann Ming Samborski</dc:creator>
        </item>
        <item>
            <title><![CDATA[Stop reacting to breaches and start preventing them with User Risk Scoring]]></title>
            <link>https://blog.cloudflare.com/adaptive-access-user-risk-scoring/</link>
            <pubDate>Wed, 04 Mar 2026 06:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare One now incorporates dynamic User Risk Scores into Access policies to enable automated, adaptive security responses. This update allows teams to move beyond binary "allow/deny" rules by evaluating continuous behavior signals from both internal and third-party sources. ]]></description>
            <content:encoded><![CDATA[ <p>Most security teams spend their days playing a high-stakes game of Whac-A-Mole. A user’s credentials get phished, or they accidentally download a malicious file, and suddenly you’re in incident response mode. </p><p>We built our <a href="https://www.cloudflare.com/learning/access-management/what-is-sase/"><u>SASE</u></a> platform, Cloudflare One, to stop that cycle. By placing Access and Gateway in front of your applications and Internet traffic, we gave you the tools to decide who gets in and where they can go.</p><p>Today, we’re making those decisions smarter. You can now incorporate <b>User Risk Scores</b> directly into your <a href="https://www.cloudflare.com/learning/access-management/what-is-ztna/"><u>zero trust network access (ZTNA)</u></a> policies. Instead of just checking "Who is this user?" and "Is their device healthy?", you can now ask, "How has this user been behaving lately?" and adjust their access in real time.</p>
    <div>
      <h3>Step 1: From "what" to "how"</h3>
      <a href="#step-1-from-what-to-how">
        
      </a>
    </div>
    <p>For years, traditional corporate access was binary. You either had the right login and the right certificate, or you didn’t. But identity is fluid. A legitimate user can become a risk if their account is compromised or if they start exhibiting "<a href="https://www.cloudflare.com/learning/access-management/what-is-an-insider-threat/"><u>insider threat</u></a>" behaviors — like impossible travel, multiple failed login attempts, or triggering data loss prevention rules by moving sensitive data.</p><p>Cloudflare One now continuously calculates a risk score for every user in your organization based on these behaviors.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/15N4TzN0c5kYtPjlpMWYDa/e8c621ba2c2c253c04e6d6dbff992117/image1.png" />
          </figure><p><sup><i>Example list of users and their risk scores</i></sup></p><p>Once you’ve onboarded your team to Cloudflare One, you can navigate to the <b>Team &amp; Resources &gt; Users &gt; Risk Score </b>section of the dashboard. Here, you can define which behaviors matter to you. For example, you might decide that impossible travel has a "high" risk level, while using a device in need of an update is "medium."</p><p>Cloudflare’s risk engine continuously evaluates telemetry from across the SASE platform. For internal signals, the engine monitors logs from <a href="https://www.cloudflare.com/zero-trust/products/access/"><u>Cloudflare Access</u></a> (e.g., successful/failed logins, geographic context) and <a href="https://www.cloudflare.com/zero-trust/products/gateway/"><u>Cloudflare Gateway</u></a> (e.g., malware hits, risky browsing categories, or sensitive data triggers in DLP).</p><p>For third-party signals, we’ve built service-to-service integrations with partners like CrowdStrike and <a href="https://developers.cloudflare.com/reference-architecture/architectures/cloudflare-sase-with-sentinelone/"><u>SentinelOne</u></a>. These integrations allow Cloudflare to ingest external telemetry, such as <a href="https://developers.cloudflare.com/cloudflare-one/integrations/service-providers/crowdstrike/#device-posture-attributes"><u>CrowdStrike’s device posture attributes</u></a>, and map it to a user’s profile.</p><p>The calculation logic is designed to be deterministic:</p><ol><li><p><b>Selection:</b> Administrators choose which specific "risk behaviors" (impossible travel, DLP violations, and more) to enable for their organization.</p></li><li><p><b>Aggregation:</b> The engine identifies all risk events associated with a user.</p></li><li><p><b>Scoring:</b> A user’s risk score is determined by the highest risk level (low, medium, or high) of any <i>enabled</i> behavior triggered during that period.</p></li><li><p><b>Reset:</b> If an admin investigates and clears an incident, they can manually reset the user’s score, which preserves the history but resets their access based on risk data gathered going forward.</p></li></ol>
    <div>
      <h3>Step 2: Easily apply adaptive access</h3>
      <a href="#step-2-easily-apply-adaptive-access">
        
      </a>
    </div>
    <p>Knowing a user is risky is step one. Doing something about it — automatically — is step two.</p><p>In the past, if a security analyst saw a suspicious user, they’d have to manually revoke sessions or move the user into a "restricted" group in their <a href="https://www.cloudflare.com/learning/access-management/what-is-an-identity-provider/"><u>Identity Provider (IdP)</u></a>. That takes time — time an attacker uses to move laterally.</p><p>Now, you can build <b>Adaptive Access</b> policies. When you create or edit an Access policy, you’ll find a new selector: <b>User Risk Score</b>.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/23fnnidZJpbIsd0btV88uD/cc1ae840bf753758febd63f1f44cb851/image3.png" />
          </figure><p><sup><i>Example of the new User Risk Score selector in an Access policy.</i></sup><sup> </sup></p><p>This allows you to create global or application-specific rules such as: "If a user's risk score is high, they cannot access the Finance Portal," or "If a user's risk score is medium, they must use a physical security key to log in." Such rules ensure corporate operations are not interrupted while additional layers of security are applied.</p>
    <div>
      <h3>Step 3: Closing the loop</h3>
      <a href="#step-3-closing-the-loop">
        
      </a>
    </div>
    <p>The best part of this system is that it’s dynamic. If a user’s risk score drops after being reviewed and cleared by an investigator, their access is automatically restored based on your policy. Today, risk-based access can revoke access in the middle of an active session when risk score increases. In the future, we will explore expanding this to enforce step-up MFA in the middle of an active session when the risk score changes as well. </p><p>We’ve also made sure this works with the tools you already use. If you use Okta, Cloudflare can <a href="https://developers.cloudflare.com/cloudflare-one/team-and-resources/users/risk-score/#send-risk-score-to-okta"><u>share these risk signals back to Okta</u></a>, ensuring that a user flagged on the network is also restricted at the front door of your <a href="https://www.cloudflare.com/learning/access-management/what-is-sso/"><u>SSO</u></a>. This integration uses the <a href="https://openid.net/specs/openid-sharedsignals-framework-1_0.html"><u>Shared Signals Framework</u></a>, which enables the sharing of risk signals across platforms.</p>
    <div>
      <h3>Move faster, stay secure</h3>
      <a href="#move-faster-stay-secure">
        
      </a>
    </div>
    <p>We built Cloudflare One so that security teams could stop being the "department of no" and start being the department of "yes, and safely." Incorporating user risk scores into your Access policies is the next step in that journey. It moves your security from a static snapshot at login to a continuous, living conversation with your network architecture.</p><p>If you’re already a Cloudflare customer, you can start exploring these risk signals in your dashboard today. If you’re still wrestling with legacy VPNs or manual security reviews, we’d love to help you flip the switch.</p><p>You can <a href="https://dash.cloudflare.com/sign-up/zero-trust"><u>get started for free</u></a> for up to 50 users — no sales call required. For larger organizations looking to integrate third-party signals like CrowdStrike or SentinelOne into their global policies, our team is ready to walk you through a ZTNA pilot.</p><p><a href="https://www.cloudflare.com/products/zero-trust/plans/enterprise/"><u>Reach out to our team here</u></a> to see how adaptive access can fit into your SASE roadmap.</p> ]]></content:encoded>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Access]]></category>
            <category><![CDATA[Cloudflare Access]]></category>
            <category><![CDATA[Cloudflare One User Risk Score]]></category>
            <guid isPermaLink="false">1YQO5CPesGaryX68LLpSmv</guid>
            <dc:creator>Nevins Bartolomeo</dc:creator>
            <dc:creator>Noelle Kagan</dc:creator>
            <dc:creator>Ann Ming Samborski</dc:creator>
        </item>
        <item>
            <title><![CDATA[RDP without the risk: Cloudflare's browser-based solution for secure third-party access]]></title>
            <link>https://blog.cloudflare.com/browser-based-rdp/</link>
            <pubDate>Fri, 21 Mar 2025 13:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare now provides clientless, browser-based support for the Remote Desktop Protocol (RDP). It enables secure, remote Windows server access without VPNs or RDP clients. ]]></description>
            <content:encoded><![CDATA[ <p><a href="https://blog.cloudflare.com/intro-access-for-infrastructure-ssh/"><u>Short-lived SSH access</u></a> made its debut on Cloudflare’s <a href="https://www.cloudflare.com/learning/access-management/what-is-sase"><u>SASE</u></a> platform in October 2024. Leveraging the knowledge gained through the <a href="https://blog.cloudflare.com/cloudflare-acquires-bastionzero/"><u>BastionZero acquisition</u></a>, short-lived SSH access enables organizations to apply <a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/">Zero Trust</a> controls in front of their Linux servers. That was just the beginning, however, as we are thrilled to announce the release of a long-requested feature: clientless, browser-based support for the <a href="https://www.cloudflare.com/learning/access-management/what-is-the-remote-desktop-protocol/"><u>Remote Desktop Protocol</u></a> (RDP). Built on top of Cloudflare’s modern proxy architecture, our RDP proxy offers a secure and performant solution that, critically, is also easy to set up, maintain, and use.</p>
    <div>
      <h3>Security challenges of RDP </h3>
      <a href="#security-challenges-of-rdp">
        
      </a>
    </div>
    <p><a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/rdp/"><u>Remote Desktop Protocol (RDP)</u></a> was born in 1998 with <a href="https://news.microsoft.com/1998/06/16/microsoft-releases-windows-nt-server-4-0-terminal-server-edition/"><u>Windows NT 4.0 Terminal Server Edition</u></a>. If you have never heard of that Windows version, it’s because, well, there’s been 16 major Windows releases since then. Regardless, RDP is still used across thousands of organizations to enable remote access to Windows servers. It’s a bit of a strange protocol that relies on a graphical user interface to display screen captures taken in very close succession in order to emulate the interactions on the remote Windows server. (There’s more happening here beyond the screen captures, including drawing commands, bitmap updates, and even video streams. Like we said — it’s a bit strange.) Because of this complexity, RDP can be computationally demanding and poses a challenge for running at high performance over traditional <a href="https://www.cloudflare.com/learning/access-management/what-is-a-vpn/">VPNs</a>.</p><p>Beyond its quirks, RDP has also had a rather <a href="https://www.cloudflare.com/learning/access-management/rdp-security-risks/"><u>unsavory reputation</u></a> in the security industry due to early vulnerabilities with the protocol. The two main offenders are weak user sign-in credentials and unrestricted port access. Windows servers are commonly protected by passwords, which often have inadequate security to start, and worse still, may be shared across multiple accounts. This leaves these RDP servers open to brute force or credential stuffing attacks. </p><p>Bad actors have abused RDP’s default port, 3389, to carry out on-path attacks. One of the most severe RDP vulnerabilities discovered is called BlueKeep. Officially known as <a href="https://nvd.nist.gov/vuln/detail/CVE-2019-0708"><i>CVE-2019-0708</i></a>, BlueKeep is a vulnerability that allows <a href="https://www.cloudflare.com/learning/security/what-is-remote-code-execution/">remote code execution (RCE) </a>without authentication, as long as the request adheres to a specific format and is sent to a port running RDP. Worse still, it is wormable, meaning that BlueKeep can spread to other machines within the network with no user action. Because bad actors can compromise RDP to gain unauthorized access, attackers can then <a href="https://www.cloudflare.com/learning/security/glossary/what-is-lateral-movement/">move laterally</a> within the network, escalating privileges, and installing <a href="https://www.cloudflare.com/learning/ddos/glossary/malware/">malware</a>. RDP has also been used to deploy <a href="https://www.cloudflare.com/learning/security/ransomware/what-is-ransomware/">ransomware</a> such as Ryuk, Conti, and DoppelPaymer, earning it the nickname “Ransomware Delivery Protocol.” </p><p>This is a subset of vulnerabilities in RDP’s history, but we don’t mean to be discouraging. Thankfully, due to newer versions of Windows, CVE patches, improved password hygiene, and better awareness of privileged access, many organizations have reduced their <a href="https://www.cloudflare.com/learning/security/what-is-an-attack-surface/">attack surface</a>. However, for as many secured Windows servers that exist, there are still countless unpatched or poorly configured systems online, making them easy targets for ransomware and botnets. </p>
    <div>
      <h3>The need for a browser-based RDP solution</h3>
      <a href="#the-need-for-a-browser-based-rdp-solution">
        
      </a>
    </div>
    <p>Despite its <a href="https://www.cloudflare.com/learning/access-management/rdp-security-risks/">security risks</a>, RDP remains essential for many organizations, particularly those with distributed workforces and third-party contractors. It provides value for compute-intensive tasks that require high-powered Windows servers with CPU/GPU resources greater than users’ machines can offer. For security-focused organizations, RDP grants better visibility into who is accessing Windows servers and what actions are taken during those sessions. </p><p>Because issuing corporate devices to contractors is costly and cumbersome, many organizations adopt a bring-your-own-device (BYOD) policy. This decision instead requires organizations to provide contractors with a means to RDP to a Windows server with the necessary corporate resources to fulfill their role.</p><p>Traditional RDP requires client software on user devices, so this is not an appropriate solution for contractors (or any employees) using personal machines or unmanaged devices. Previously, Cloudflare customers had to rely on self-hosted third-party tools like <a href="https://guacamole.apache.org/"><u>Apache Guacamole</u></a> or <a href="https://devolutions.net/gateway/"><u>Devolutions Gateway</u></a> to enable browser-based RDP access. This created several operational pain points:</p><ul><li><p><b>Infrastructure complexity:</b> Deploying and maintaining RDP gateways increases operational overhead.</p></li><li><p><b>Maintenance burden:</b> Commercial and open-source tools may require frequent updates and patches, sometimes even necessitating custom forks.</p></li><li><p><b>Compliance challenges:</b> Third-party software requires additional security audits and risk management assessments, particularly for regulated industries.</p></li><li><p><b>Redundancy, but not the good kind</b> - Customers come to Cloudflare to reduce the complexity of maintaining their infrastructure, <i>not add to it</i>.</p></li></ul><p>We’ve been listening. Cloudflare has architectured a high-performance RDP proxy that leverages the modern security controls already part of our <a href="https://www.cloudflare.com/learning/access-management/what-is-ztna/"><u>Zero Trust Network Access (ZTNA)</u></a> service. We feel that the “security/performance tradeoff” the industry commonly touts is a dated mindset. With the right underlying network architecture, we can help mitigate RDP’s most infamous challenges.</p>
    <div>
      <h3>Introducing browser-based RDP with Access</h3>
      <a href="#introducing-browser-based-rdp-with-access">
        
      </a>
    </div>
    <p>Cloudflare's browser-based RDP solution is the newest addition to <a href="https://www.cloudflare.com/zero-trust/products/access/"><u>Cloudflare Access</u></a> alongside existing <a href="https://developers.cloudflare.com/cloudflare-one/applications/non-http/browser-rendering/"><u>clientless SSH and VNC offerings</u></a>, enabling secure, remote Windows server access without VPNs or RDP clients. Built natively within Cloudflare’s global network, it requires no additional infrastructure.</p><p>Our browser-based RDP access combines the power of self-hosted Access applications with the additional flexibility of <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#4-add-a-target">targets</a>, introduced with <a href="https://developers.cloudflare.com/cloudflare-one/applications/non-http/infrastructure-apps/"><u>Access for Infrastructure</u></a>. Administrators can enforce:</p><ul><li><p><b>Authentication</b>: Control how users authenticate to your internal RDP resources with <a href="https://www.cloudflare.com/learning/access-management/what-is-sso/">SSO</a>, <a href="https://www.cloudflare.com/learning/access-management/what-is-multi-factor-authentication/">MFA</a>, and device posture.</p></li><li><p><b>Authorization:</b> Use <a href="https://www.cloudflare.com/learning/access-management/what-is-access-control/">policy-based access control </a>to determine who can access what target and when. </p></li><li><p><b>Auditing:</b> Provide Access logs to support regulatory compliance and visibility in the event of a security breach.</p></li></ul><p>Users only need a web browser — no native RDP client is necessary! RDP servers are accessed through our app connector, <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/"><u>Cloudflare Tunnel</u></a>, using a common deployment model of existing Access customers. There is no need to provision user devices to access particular RDP servers, making for minimal setup to adopt this new functionality.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6vAxzxVY1RXc0batsTEdfn/23322d79ac68cfa0da698bdb2113db2c/unnamed__4_.png" />
          </figure>
    <div>
      <h4>How it works</h4>
      <a href="#how-it-works">
        
      </a>
    </div>
    
    <div>
      <h5>The client</h5>
      <a href="#the-client">
        
      </a>
    </div>
    <p>Cloudflare’s implementation leverages <a href="https://github.com/Devolutions/IronRDP"><u>IronRDP</u></a>, a high-performance RDP client that runs in the browser. It was selected because it is a modern, well-maintained, RDP client implementation that offers an efficient and responsive experience. Unlike Java-based Apache Guacamole, another popular RDP client implementation, IronRDP is built with Rust and integrates very well with Cloudflare’s development ecosystem.</p><p>While selecting the right tools can make all the difference, using a browser to facilitate an RDP session faces some challenges. From a practical perspective, browsers just can't send RDP messages. RDP relies directly on the Layer 4 Transmission Control Protocol (TCP) for communication, and while browsers can use TCP as the underlying protocol, they do not expose APIs that would let apps build protocol support directly on raw TCP sockets.</p><p>Another challenge is rooted in a security consideration: the username and password authentication mechanism that is native to RDP leaves a lot to be desired in the modern world of Zero Trust.</p><p>In order to tackle both of these challenges, the IronRDP client encapsulates the RDP session in a WebSocket connection. Wrapping the Layer 4 TCP traffic in HTTPS enables the client to use native browser APIs to communicate with Cloudflare’s RDP proxy. Additionally, it enables Cloudflare Access to secure the entire session using identity-aware policies. By attaching a Cloudflare Access authorization JSON Web Token (JWT) via cookie to the WebSocket connection, every inter-service hop of the RDP session is verified to be coming from the authenticated user.  </p><p>A brief aside into how security and performance is optimized: in conventional client-based RDP traffic, the client and server negotiate a <a href="https://www.cloudflare.com/learning/ssl/transport-layer-security-tls/">TLS</a> connection to secure and verify the session. However, because the browser WebSocket connection is already secured with TLS to Cloudflare, we employ IronRDP’s RDCleanPath protocol extension to eliminate this second encapsulation of traffic. Removing this redundancy avoids unnecessary performance degradation and increased complexity during session handshakes.</p>
    <div>
      <h5>The server</h5>
      <a href="#the-server">
        
      </a>
    </div>
    <p>The IronRDP client initiates a WebSocket connection to a dedicated WebSocket proxy, which is responsible for authenticating the client, terminating the WebSocket connection, and proxying tunneled RDP traffic deeper into Cloudflare’s infrastructure to facilitate connectivity. The seemingly simple task of determining how this WebSocket proxy should be built turned out to be the most challenging<b> </b>decision in the development process. </p><p>Our initial proposal was to develop a new service that would run on every server within our network. While this was feasible, operating a new service would introduce a non-trivial maintenance burden, which ultimately turned out to be more overhead than value-add in this case. The next proposal was to build it into <a href="https://blog.cloudflare.com/upgrading-one-of-the-oldest-components-in-cloudflare-software-stack/"><u>Front Line</u></a> (FL), one of Cloudflare’s oldest services that is responsible for handling tens of millions of HTTP requests per second. This approach would have sidestepped the need to expose new IP addresses and benefitted from the existing scaffolding to let the team move quickly. Despite being promising at first, this approach was decided against because FL is undergoing significant investment, and the team didn't want to build on shifting sands.</p><p>Finally, we identified a solution that implements the proxy service using <a href="https://workers.cloudflare.com/"><u>Cloudflare Workers</u></a>! Fortunately, Workers automatically scales to massive request rates, which eliminates some of the groundwork we’d lay if we had chosen to build a new service. Candidly, this approach was not initially preferred due to some ambiguities around how Workers communicates with internal Cloudflare services, but with support from the Workers team, we found a path forward. </p><p>From the WebSocket proxy Worker, the tunneled RDP connection is sent to the Apollo service, which is responsible for routing traffic between on-ramps and off-ramps for <a href="https://www.cloudflare.com/zero-trust/">Cloudflare Zero Trust</a>. Apollo centralizes and abstracts these complexities to let other services focus on application-specific functionality. Apollo determines which Cloudflare colo is closest to the target Cloudflare Tunnel and establishes a connection to an identical Apollo instance running in that colo. The egressing Apollo instance can then facilitate the final connection to the Cloudflare Tunnel. By using Cloudflare's global network to traverse the distance between the ingress colo and the target Cloudflare Tunnel, network disruptions and congestion is managed.</p><p>Apollo connects to the RDP server and passes the ingress and egress connections to <a href="https://blog.cloudflare.com/from-ip-packets-to-http-the-many-faces-of-our-oxy-framework/"><u>Oxy</u></a>-teams, the service responsible for inspecting and proxying the RDP traffic. It functions as a pass-through (strictly enabling traffic connectivity) as the web client authenticates to the RDP server. Our initial release makes use of <a href="https://learn.microsoft.com/en-us/windows-server/security/kerberos/ntlm-overview"><u>NT Lan Manager (NTLM)</u></a> authentication, a challenge-response authentication protocol requiring username and password entry. Once the client has authenticated with the server, Oxy-teams is able to proxy all subsequent RDP traffic!</p><p>This may sound like a lot of hops, but every server in our network runs every service. So believe it or not, this complex dance takes place on a single server and by using UNIX domain sockets for communication, we also minimize any performance impact. If any of these servers become overloaded, experience a network fault, or have a hardware problem, the load is automatically shifted to a neighboring server with the help of <a href="https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/"><u>Unimog</u></a>, Cloudflare’s L4 load balancer.</p>
    <div>
      <h4>Putting it all together</h4>
      <a href="#putting-it-all-together">
        
      </a>
    </div>
    <ol><li><p><b>User initiation:</b> The user selects an RDP server from Cloudflare’s <a href="https://developers.cloudflare.com/cloudflare-one/applications/app-launcher/"><u>App Launcher</u></a> (or accesses it via a direct URL). Each RDP server is associated with a public hostname secured by Cloudflare. </p></li><li><p><b>Ingress:</b> This request is received by the closest data center within <a href="https://www.cloudflare.com/network/"><u>Cloudflare’s network</u></a>. </p></li><li><p><b>Authentication:</b> Cloudflare Access authenticates the session by validating that the request contains a valid JWT. This token certifies that the user is authorized to access the selected RDP server through the specified domain.</p></li><li><p><b>Web client delivery:</b> <a href="https://developers.cloudflare.com/workers/"><u>Cloudflare Workers</u></a> serves the IronRDP web client to the user’s browser.</p></li><li><p><b>Secure tunneling:</b> The client tunnels RDP traffic from the user’s browser over a TLS-secured WebSocket to another Cloudflare Worker. </p></li><li><p><b>Traffic routing:</b> The Worker that receives the IronRDP connection terminates the WebSocket and initiates a connection to <a href="https://blog.cloudflare.com/extending-local-traffic-management-load-balancing-to-layer-4-with-spectrum/#how-we-enabled-spectrum-to-support-private-networks"><u>Apollo</u></a>. From there, Apollo creates a connection to the RDP server.</p></li><li><p><b>Authentication relay:</b> With a connection established, Apollo relays RDP authentication messages between the web client and the RDP server. </p></li><li><p><b>Connection establishment:</b> Upon successful authentication, Cloudflare serves as an RDP proxy between the web browser and the RDP server, connecting the user to the RDP server with free-flowing traffic. </p></li><li><p><b>Policy enforcement:</b> Cloudflare's secure web gateway, <a href="https://blog.cloudflare.com/from-ip-packets-to-http-the-many-faces-of-our-oxy-framework/"><u>Oxy</u></a>-teams, applies Layer 4 policy enforcement and logging of the RDP traffic. </p></li></ol>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2wWryOYY69cHw5cDmQHAqi/cb40a492b1e194cd572018eb4a5792ba/3.png" />
          </figure><p>Key benefits of this architecture:</p><ul><li><p><b>No additional software:</b> Access Windows servers directly from a browser.</p></li><li><p><b>Low latency:</b> Cloudflare’s global network minimizes performance overhead.</p></li><li><p><b>Enhanced security:</b> RDP access is protected by Access policies, preventing lateral movement.</p></li><li><p><b>Integrated logging and monitoring:</b> Administrators can observe and control RDP traffic.</p></li></ul><p>To learn more about Cloudflare's proxy capabilities, take a look at our <a href="https://blog.cloudflare.com/introducing-oxy/"><u>related blog post</u></a> explaining our proxy framework.</p>
    <div>
      <h3>Selective, modern RDP authentication</h3>
      <a href="#selective-modern-rdp-authentication">
        
      </a>
    </div>
    <p>Cloudflare’s browser-based RDP solution exclusively supports modern RDP authentication mechanisms, enforcing best practices for secure access. Our architecture ensures that RDP traffic using outdated or weak legacy security features from older versions of the RDP standard, such as unsecured password-based authentication or RC4 encryption, are never allowed to reach customer endpoints.</p><p>Cloudflare supports secure session negotiation using the following principles:</p><ol><li><p>TLS-based WebSocket connection for transport security.</p></li><li><p>Fine-grained policies that enforce single sign on (SSO), multi-factor authentication (MFA), and dynamic authorization.</p></li><li><p>Integration with enterprise identity providers via SAML (Security Assertion Markup Language) and OIDC (OpenID Connect).</p></li></ol><p>Every RDP session that passes through Cloudflare’s network is encrypted and authenticated.</p>
    <div>
      <h4>What’s next? </h4>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>This is only the beginning for our browser-based RDP solution! We have already identified a few areas for continued focus:</p><ul><li><p><b>Enhanced visibility and control for administrators:</b> Because RDP traffic passes through Cloudflare Workers and proxy services, browser-based RDP will expand to include session monitoring. We are also evaluating <a href="https://www.cloudflare.com/learning/access-management/what-is-dlp/">data loss prevention (DLP) </a>support, such as restricting actions like file transfers and clipboard use, to prevent unauthorized <a href="https://www.cloudflare.com/learning/security/what-is-data-exfiltration/">data exfiltration</a> without compromising performance. </p></li><li><p><b>Advanced authentication:</b> Long-lived credentials are a thing of the past. Future iterations of browser-based RDP will include <a href="https://www.cloudflare.com/learning/security/threats/what-is-passwordless-authentication/">passwordless</a> functionality, eliminating the need for end users to remember passwords and administrators from having to manage them. To that end, we are evaluating methods such as client certificate authentication, passkeys and smart cards, and integration with third-party authentication providers via Access.</p></li></ul>
    <div>
      <h5>Compliance and FedRAMP High certification</h5>
      <a href="#compliance-and-fedramp-high-certification">
        
      </a>
    </div>
    <p>We plan to include browser-based RDP in our <a href="https://www.cloudflare.com/learning/privacy/what-is-fedramp/">FedRAMP</a> High offering for enterprise and government organizations, a high-priority initiative <a href="https://blog.cloudflare.com/cloudflares-commitment-to-advancing-public-sector-security-worldwide/"><u>we announced in early February</u></a>. This certification will validate that our solution meets the highest standards for:</p><ul><li><p><b>Data protection</b></p></li><li><p><b>Identity and access management</b></p></li><li><p><b>Continuous monitoring</b></p></li><li><p><b>Incident response</b></p></li></ul><p>Seeking FedRAMP High compliance demonstrates Cloudflare’s commitment to securing sensitive environments, such as those in the <a href="https://www.cloudflare.com/public-sector/">federal government</a>, <a href="https://www.cloudflare.com/healthcare/">healthcare</a>, and <a href="https://www.cloudflare.com/banking-and-financial-services/">financial</a> sectors.</p><p>By enforcing a modern, opinionated, and secure implementation of RDP, Cloudflare provides a secure, scalable, and compliant solution tailored to the needs of organizations with critical security and compliance mandates.</p>
    <div>
      <h3>Get started today</h3>
      <a href="#get-started-today">
        
      </a>
    </div>
    <p>At Cloudflare, we are committed to providing the most comprehensive solution for ZTNA, which now also includes privileged access to sensitive infrastructure like Windows servers over browser-based RDP. Cloudflare’s browser-based RDP solution is in closed beta with new customers being onboarded each week. You can <a href="http://www.cloudflare.com/lp/browser-based-rdp-beta"><u>request access here</u></a> to try out this exciting new feature.</p><p>In the meantime, check out our<a href="https://developers.cloudflare.com/cloudflare-one/applications/non-http/infrastructure-apps/"> <u>Access for Infrastructure</u></a> documentation to learn more about how Cloudflare protects privileged access to sensitive infrastructure. Access for Infrastructure is currently <a href="https://dash.cloudflare.com/sign-up/teams"><u>available free</u></a> to teams of under 50 users, and at no extra cost to existing pay-as-you-go and Contract plan customers through an Access or Zero Trust subscription. Stay tuned as we continue to natively rebuild BastionZero’s technology into Cloudflare’s Access for Infrastructure service!</p> ]]></content:encoded>
            <category><![CDATA[Security Week]]></category>
            <category><![CDATA[Zero Trust]]></category>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <category><![CDATA[Acquisitions]]></category>
            <category><![CDATA[Cloudflare Access]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Clientless]]></category>
            <category><![CDATA[Remote Work]]></category>
            <category><![CDATA[VDI]]></category>
            <category><![CDATA[Remote Desktop Protocol ]]></category>
            <guid isPermaLink="false">2P5rqqGRcQQFywmNmp85oM</guid>
            <dc:creator>Ann Ming Samborski</dc:creator>
            <dc:creator>Gabriel Bauman</dc:creator>
            <dc:creator>Athanasios Filippidis</dc:creator>
            <dc:creator>Mike Borkenstein</dc:creator>
        </item>
        <item>
            <title><![CDATA[Fearless SSH: short-lived certificates bring Zero Trust to infrastructure]]></title>
            <link>https://blog.cloudflare.com/intro-access-for-infrastructure-ssh/</link>
            <pubDate>Wed, 23 Oct 2024 13:00:00 GMT</pubDate>
            <description><![CDATA[ Access for Infrastructure, BastionZero’s integration into Cloudflare One, will enable organizations to apply Zero Trust controls to their servers, databases, Kubernetes clusters, and more. Today we’re announcing short-lived SSH access as the first available feature of this integration.
 ]]></description>
            <content:encoded><![CDATA[ <p><a href="https://blog.cloudflare.com/cloudflare-acquires-bastionzero"><u>BastionZero joined Cloudflare</u></a> in May 2024. We are thrilled to announce Access for Infrastructure as BastionZero’s native integration into our <a href="https://www.cloudflare.com/learning/access-management/what-is-sase/"><u>SASE</u></a> platform, Cloudflare One. Access for Infrastructure will enable organizations to apply Zero Trust controls in front of their servers, databases, network devices, Kubernetes clusters, and more. Today, we’re announcing <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#_top"><u>short-lived SSH access</u></a> as the first available feature. Over the coming months we will announce support for other popular infrastructure access target types like <a href="https://www.cloudflare.com/learning/access-management/what-is-the-remote-desktop-protocol/"><u>Remote Desktop Protocol (RDP)</u></a>, Kubernetes, and databases.</p>
    <div>
      <h2>Applying Zero Trust principles to infrastructure</h2>
      <a href="#applying-zero-trust-principles-to-infrastructure">
        
      </a>
    </div>
    <p>Organizations have embraced <a href="https://www.cloudflare.com/learning/security/glossary/what-is-zero-trust/"><u>Zero Trust</u></a> initiatives that modernize secure access to web applications and networks, but often the strategies they use to manage privileged access to their infrastructure can be siloed, overcomplicated, or ineffective. When we speak to customers about their infrastructure access solution, we see common themes and pain points:</p><ul><li><p><b>Too risky:</b> Long-lived credentials and shared keys get passed around and inflate the risk of compromise, excessive permissions, and lateral movement</p></li><li><p><b>Too clunky</b>: Manual credential rotations and poor visibility into infrastructure access slow down incident response and compliance efforts</p></li></ul><p>Some organizations have dealt with the problem of privileged access to their infrastructure by purchasing a <a href="https://en.wikipedia.org/wiki/Privileged_access_management"><u>Privileged Access Management (PAM)</u></a> solution or by building a homegrown key management tool. Traditional PAM solutions introduce audit logging and session recording features that capture user interactions with their servers and other infrastructure and/or centralized vaults that rotate keys and passwords for infrastructure every time a key is used. But this centralization can introduce performance bottlenecks, harm usability, and come with a significant price tag. Meanwhile, homegrown solutions are built from primitives provided by cloud providers or custom infrastructure-as-code solutions, and can be costly and tiresome to build out and maintain. </p><p>We believe that organizations should apply Zero Trust principles to their most sensitive corporate resources, which naturally includes their infrastructure. That’s why we’re augmenting Cloudflare’s <a href="https://www.cloudflare.com/learning/access-management/what-is-ztna/"><u>Zero Trust Network Access (ZTNA)</u></a> service with <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#_top"><u>Access to Infrastructure</u></a> to support privileged access to sensitive infrastructure, and offering features that will look somewhat similar to those found in a PAM solution:</p><ul><li><p><b>Access</b>: Connect remote users to infrastructure targets via Cloudflare’s global network.</p></li><li><p><b>Authentication</b>: Eliminate the management of credentials for servers, containers, clusters, and databases and replace them with <a href="https://www.cloudflare.com/learning/access-management/what-is-sso/"><u>SSO</u></a>, <a href="https://www.cloudflare.com/learning/access-management/what-is-multi-factor-authentication/"><u>MFA</u></a>, and <a href="https://blog.cloudflare.com/6-new-ways-to-validate-device-posture/"><u>device posture</u></a>. </p></li><li><p><b>Authorization</b>: Use policy-based access control to determine who can access what target, when, and under what role. </p></li><li><p><b>Auditing</b>: Provide command logs and session recordings to allow administrators to audit and replay their developers’ interactions with the organization’s infrastructure.</p></li></ul><p>At Cloudflare, we are big believers that unified experiences produce the best security outcomes, and because of that, we are natively rebuilding each BastionZero feature into Cloudflare’s ZTNA service. Today, we will cover the recently-released feature for short-lived SSH access.</p>
    <div>
      <h2>Secure Shell (SSH) and its security risks</h2>
      <a href="#secure-shell-ssh-and-its-security-risks">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/learning/access-management/what-is-ssh/"><u>SSH</u></a> (Secure Shell) is a protocol that is commonly used by developers or system administrators to secure the connections used to remotely administer and manage (usually Linux/Unix) servers. SSH access to a server often comes with elevated privileges, including the ability to delete or <a href="https://www.cloudflare.com/learning/security/what-is-data-exfiltration/">exfiltrate</a> data or to install or remove applications on the server. </p><p>Modern enterprises can have tens, hundreds, or even thousands of SSH targets. Servers accessible via SSH can be targeted in <a href="https://thehackernews.com/2023/12/warning-poorly-secured-linux-ssh.html"><u>cryptojacking</u></a> or <a href="https://thehackernews.com/2023/06/cybercriminals-hijacking-vulnerable-ssh.html"><u>proxyjacking</u></a> attacks. Manually tracking, rotating, and validating SSH credentials that grant access is a chore that is often left undone, which creates risks that these long-lived credentials could be compromised. There’s nothing stopping users from copying SSH credentials and sharing them with other users or transferring them to unauthorized devices.</p><p>Although many organizations will gate access to their servers to users that are inside their corporate network, this is no longer enough to protect against modern attackers. Today, the principles of Zero Trust demand that an organization also tracks who exactly is accessing their servers with SSH, and what commands they are running on those servers once they have access. In fact, the elevated privileges that come along with SSH access mean that compliance frameworks like <a href="https://www.cloudflare.com/en-gb/trust-hub/compliance-resources/soc-2/"><u>SOC2</u></a>, <a href="https://www.cloudflare.com/en-gb/trust-hub/compliance-resources/iso-certifications/"><u>ISO27001</u></a>, <a href="https://www.cloudflare.com/en-gb/trust-hub/compliance-resources/fedramp/"><u>FedRAMP</u></a> and others have criteria that require monitoring who has access with SSH and what exactly they are doing with that access. </p>
    <div>
      <h2>Introducing SSH with Access for Infrastructure</h2>
      <a href="#introducing-ssh-with-access-for-infrastructure">
        
      </a>
    </div>
    <p>We’ve introduced<a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#_top"><u> SSH with Access for Infrastructure</u></a> to provide customers with granular control over privileged access to servers via SSH. The feature provides improved visibility into who accessed what service and what they did during their SSH session, while also eliminating the risk and overhead associated with managing SSH credentials. Specifically, this feature enables organizations to:</p><ul><li><p>Eliminate security risk and overhead of managing SSH keys and instead use short-lived SSH certificates issued by a Cloudflare-managed certificate authority (CA).</p></li><li><p>Author fine-grained policy to govern who can SSH to your servers and through which SSH user(s) they can log in as.</p></li><li><p>Monitor infrastructure access with Access and SSH command logs, supporting regulatory compliance and providing visibility in case of security breach.</p></li><li><p>Avoid changing end-user workflows. SSH with Access for Infrastructure supports whatever native SSH clients end users happen to be using. </p></li></ul><p>SSH with Access for Infrastructure is supported through one of the most common deployment models of Cloudflare One customers. Users can connect using our device client (WARP), and targets are made accessible using Cloudflare Tunnel (cloudflared or the WARP connector). This architecture allows customers with existing Cloudflare One deployments to enable this feature with little to no effort. The only additional setup will be configuring your target server to accept a Cloudflare SSH certificate.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4msjrxXyhuuh7rUmB0zn8c/3e24a431820aee57651bad1d57e57ec5/BLOG-2604_2.png" />
          </figure><p>Cloudflare One already offers multiple ways to secure organizations' SSH traffic through network controls. This new SSH with Access for Infrastructure aims to incorporate the strengths of those existing solutions together with additional controls to authorize ports, protocols, and specific users as well as a much improved deployment workflow and audit logging capabilities.</p>
    <div>
      <h2>Eliminating SSH credentials using an SSH CA</h2>
      <a href="#eliminating-ssh-credentials-using-an-ssh-ca">
        
      </a>
    </div>
    <p>How does Access for Infrastructure eliminate your SSH credentials? This is done by replacing SSH password and SSH keys with an SSH Certificate Authority (CA) that is managed by Cloudflare. Generally speaking, a CA’s job is to issue certificates that bind an entity to an entity’s public key. Cloudflare’s SSH CA has a secret key that is used to sign certificates that authorize access to a target (server) via SSH, and a public key that is used by the target (server) to cryptographically validate these certificates. The public key for the SSH CA can be obtained by <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca"><u>querying the Cloudflare API</u></a>. And the secret key for the SSH CA is kept secure by Cloudflare and never exposed to anyone. </p><p>To use SSH with Access for Infrastructure to grant access via SSH to a set of targets (i.e. servers), you need to <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#modify-your-sshd-config"><u>instruct those servers to trust the Cloudflare SSH CA</u></a>. Those servers will then grant access via SSH whenever they are presented with an SSH certificate that is validly signed by the Cloudflare SSH CA.</p><p>The same Cloudflare SSH CA is used to support SSH access for all of your developers and engineers to all your target servers. This greatly simplifies key management. You no longer need to manage long-lived SSH keys and passwords for individual end users, because access to targets with SSH is granted via certificates that are dynamically issued by the Cloudflare SSH CA. And, because the Cloudflare SSH CA issued short-lived SSH certificates that expire after 3 minutes, you also don’t have to worry about creating or managing long-lived SSH credentials that could be stolen by attackers. </p><p>The 3-minute time window on the SSH certificate only applies to the time window during which the user has to authenticate to the target server; it does not apply to the length of the SSH session, which can be arbitrarily longer than 3 minutes. This 3-minute window was chosen because it was short enough to reduce the risk of security compromise and long enough to ensure that we don’t miss the time window of the user’s authentication to the server, especially if the user is on a slow connection.</p>
    <div>
      <h2>Centrally managing policies down to the specific Linux user</h2>
      <a href="#centrally-managing-policies-down-to-the-specific-linux-user">
        
      </a>
    </div>
    <p>One of the problems with traditional SSH is that once a user has an SSH key or password installed on a server, they will have access to that server forever — unless an administrator somehow remembers to remove their SSH key or password from the server in question. This leads to <i>privilege creep,</i> where too many people have standing access to too many servers, creating a security risk if an SSH key or password is ever stolen or leaked.</p><p>Instead, SSH with Access for Infrastructure allows you to centrally write policies in the Cloudflare dashboard specifying exactly what (set of) users has access to what (set of) servers. Users may be authenticated by SSO, MFA, device posture, location, and more, which provides better security than just authenticating them via long-lived SSH keys or passwords that could be stolen by attackers.</p><p>Moreover, the SSH certificates issued by the Cloudflare CA include a field called <i>valid_principals</i> which indicates the specific Linux user (e.g. <i>root</i>, <i>read-only</i>, <i>ubuntu</i>, <i>ec2-user</i>) that can be assumed by the SSH connection. As such, you can write policies that specify the (set of) Linux users that a given (set of) end users may access on a given (set of) servers, as shown in the figure below. This allows you to centrally control the privileges that a given end user has when accessing a given target server. (The one caveat here is that the server must also be pre-configured to already know about the specific Linux user (e.g. <i>root) </i>that is specified in the policies and presented in the SSH certificate. Cloudflare is NOT managing the Linux users on your Linux servers.)</p><p>As shown below, you could write a policy that says users in Canada, the UK, and Australia that are authenticated with MFA and face recognition can access the <i>root </i>and <i>ec2-user </i>Linux users on a given set of servers in AWS.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4D580wfY5DxQ9iSNhflztJ/a97eea9e68b0a44ea2b9c544d1cf3bda/BLOG-2604_3.png" />
          </figure>
    <div>
      <h2>How does Cloudflare capture SSH command logs?</h2>
      <a href="#how-does-cloudflare-capture-ssh-command-logs">
        
      </a>
    </div>
    <p>Cloudflare captures SSH command logs because we built an SSH proxy that intercepts the SSH connections. The SSH proxy establishes one SSH connection between itself and the end user’s SSH client, and another SSH connection between itself and the target (server). The SSH proxy can therefore inspect the SSH commands and log them. </p><p>SSH commands are encrypted at rest using a public key that the customer uploads via the Cloudflare API. Cloudflare cannot read SSH command logs at rest, but they can be extracted (in encrypted form) from the Cloudflare API and decrypted by the customer (who holds the corresponding private key). Instructions for uploading the <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#enable-ssh-command-logging"><u>encryption public key are available in our developer documentation</u></a>.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1KvuPqP9XfUn5M6sE5Qvw4/c8eb24587b4301d4ca9bfad0b2037ee1/Log_for_digital-ocean.png" />
          </figure>
    <div>
      <h2>How the SSH interception works under the hood</h2>
      <a href="#how-the-ssh-interception-works-under-the-hood">
        
      </a>
    </div>
    
    <div>
      <h3>How does generic SSH work?</h3>
      <a href="#how-does-generic-ssh-work">
        
      </a>
    </div>
    <p>To understand how Cloudflare’s SSH proxy works, we first must review how a generic SSH connection is established.</p><p>First off, SSH runs over TCP, so to establish an SSH connection, we first need to complete a TCP handshake. Then, once the TCP handshake is complete, an SSH key exchange is needed to establish an ephemeral symmetric key between the client and the server that will be used to encrypt and authenticate their SSH traffic. The SSH key exchange is based on the server public key, also known as the <i>hostkey. </i>If you’ve ever used SSH, you’ve probably seen this message — that is the SSH server telling your SSH client to trust this hostkey for all future SSH interactions. (This is also known as TOFU or Trust On First Use.)</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3rjmLTfw8CauXPT0kumYyw/7cbfe372a00f7c7b1f6957743113b20a/BLOG-2604_5.png" />
          </figure><p>Finally, the client needs to authenticate itself to the server. This can be done using SSH passwords, SSH keys, or SSH certificates (as described above). SSH also has a mode called <i>none</i>, which means that the client does NOT need to authenticate itself to the server at all.</p>
    <div>
      <h3>So how does Cloudflare’s SSH proxy work? </h3>
      <a href="#so-how-does-cloudflares-ssh-proxy-work">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6znMxrzjyakDF3KBqEWUHX/c12a50ef7ef6c77d4bbacaac3ee8ec60/BLOG-2604_6.png" />
          </figure><p>To understand this, we note that whenever you set up SSH with Access for Infrastructure in the Cloudflare dashboard, you first need to create the set of targets (i.e. servers) that you want to make accessible via SSH. Targets can be defined by IP address or hostname. You then create an Access for Infrastructure application that captures the TCP ports (e.g. port 22) that SSH runs over for those targets, and write policies for those SSH connections, as we already described above and <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#5-add-an-infrastructure-application"><u>in our developer documentation</u></a>.</p><p>This setup allows Cloudflare to know the set of IP addresses and ports for which it must intercept SSH traffic. Thus, whenever Cloudflare sees a TCP handshake with an IP address and port that must be intercepted, it sends traffic for that TCP connection to the SSH proxy. </p><p>The SSH proxy leverages the client’s already authenticated identity from the WARP client, and enforces the configured Access for Infrastructure policies against it. If the policies do not allow the identity to connect to the target under the requested Linux user (e.g. <i>root)</i>, the SSH proxy will reject the connection and log an <b><i>Access denied</i></b><b> </b>event to the Access logs. Otherwise, if policies do allow the identity to connect, the the SSH proxy will establish the following two SSH connections: </p><ol><li><p>SSH connection from SSH proxy to target</p></li><li><p>SSH connection from end user’s SSH client (via Cloudflare’s WARP client) to SSH proxy</p></li></ol><p>Let’s take a look at each of these SSH connections, and the cryptographic material used to set them up. </p><p><b>To establish the SSH connection from SSH proxy to the target</b>, the SSH proxy acts as a client in the SSH key exchange between itself and the target server. The handshake uses the target server’s <i>hostkey</i> to establish an ephemeral symmetric key between the client and the server that will encrypt and authenticate their SSH traffic. Next, the SSH proxy must authenticate itself to the target server. This is done by presenting the server with a short-lived SSH certificate, issued by the Cloudflare SSH CA, for the specified Linux user that is requested for this connection as we already described above. Because the target server has been configured to trust the Cloudflare SSH CA, the target server will be able to successfully validate the certificate and the SSH connection will be established.</p><p><b>To establish the SSH connection from the end-user's SSH client to SSH proxy</b>, the SSH proxy acts as a server in the SSH key exchange between itself and the end-user’s SSH client. </p><p>To do this, the SSH proxy needs to inform the end user’s SSH client about the <i>hostkey</i> that will be used to establish this connection. But what <i>hostkey</i> should be used? We cannot use the same <i>hostkey </i>used by the target server, because that <i>hostkey </i>is the public key that corresponds to a private key that is known only to the target server, and not known to the SSH proxy. So, Cloudflare’s SSH proxy needs to generate its own <i>hostkey</i>. We don’t want the end user to randomly see warnings like the one shown below, so the SSH proxy should provide the same <i>hostkey </i>each time the user wants to access a given target server. But, if something does change with the <i>hostkey </i>of the target server, we do want the warning below to be shown. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3VBYjkE9DOpN7A5IjLSN0H/bfbc9e3a65cb81abc6fe4eb5c5780b39/BLOG-2604_7.png" />
          </figure><p>To achieve the desired behavior, the SSH proxy generates a <i>hostkey </i>and its corresponding private key by hashing together (a) a fixed secret value valid that associated with the customer account, along with (b) the <i>hostkey</i> that was provided by this target server (in the connection from SSH proxy to target server). This part of the design ensures that the end user only needs to see the TOFU notification the very first time it connects to the target server via WARP, because the same <i>hostkey</i> is used for all future connections to that target. And, if the <i>hostkey</i> of the target server does change as a result of a Monster-In-The-Middle attack, the warning above will be shown to the user.</p><p>Finally, during the SSH key exchange handshake from WARP client to SSH proxy, the SSH proxy informs that end user’s native SSH client that it is using <i>none</i> for client authentication. This means that the SSH client does NOT need to authenticate itself to the server at all. This part of the design ensures that the user need not enter any SSH passwords or store any SSH keys in its SSH configuration in order to connect to the target server via WARP. Also, this does not compromise security, because the SSH proxy has already authenticated the end user via Cloudflare’s WARP client and thus does not need to use the native SSH client authentication in the native SSH client.</p><p>Put this all together, and we have accomplished our goal of having end users authenticate to target servers without any SSH keys or passwords, using Cloudflare’s SSH CA instead. Moreover, we also preserve the desired behaviors of the TOFU notifications and warnings built into native SSH clients!</p>
    <div>
      <h2>All the keys</h2>
      <a href="#all-the-keys">
        
      </a>
    </div>
    <p>Before we wrap up, let’s review the cryptographic keys you need in order to deploy SSH with Access for Infrastructure. There are two keys:</p><ol><li><p><b>Public key of the SSH CA. </b>The private key of the SSH CA is only known to Cloudflare and not shared with anyone. The public key of the <a href="https://ranbel-infrastructure-access.cloudflare-docs-7ou.pages.dev/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca"><u>SSH CA is obtained from the Cloudflare API</u></a> and must be <a href="https://ranbel-infrastructure-access.cloudflare-docs-7ou.pages.dev/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca"><u>installed</u></a> on all your target servers. The same public key is used for all of your targets. This public key does not need to be kept secret.</p></li><li><p><b>Private key for SSH command log encryption. </b>To obtain logs of SSH commands, you need to generate a <a href="https://ranbel-infrastructure-access.cloudflare-docs-7ou.pages.dev/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca"><u>public-private key pair, and upload the public key to Cloudflare</u></a>. The public key will be used to encrypt your SSH commands logs at REST. You need to keep the private key secret, and you can use it to <a href="https://ranbel-infrastructure-access.cloudflare-docs-7ou.pages.dev/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#view-ssh-logs"><u>decrypt</u></a> your SSH command logs. </p></li></ol><p>That’s it! No other keys, passwords, or credentials to manage!</p>
    <div>
      <h2>Try it out today</h2>
      <a href="#try-it-out-today">
        
      </a>
    </div>
    <p>At Cloudflare, we are committed to providing the most comprehensive solution for ZTNA, which now also includes privileged access to sensitive infrastructure like servers accessed over SSH.</p><p>Organizations can now treat SSH like any other Access application and enforce strong MFA, device context, and policy-based access prior to granting user access. This allows organizations to consolidate their infrastructure access policies into their broader <a href="https://www.cloudflare.com/learning/access-management/security-service-edge-sse/">SSE</a> or SASE architecture.</p><p>You can try out Access for Infrastructure today by following <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/use-cases/ssh/ssh-infrastructure-access/#_top"><u>these instructions in our developer documentation</u></a>. Access for Infrastructure is currently available free to teams of under 50 users, and at no extra cost to existing pay-as-you-go and Contract plan customers through an Access or Zero Trust subscription. Expect to hear about a lot more features from us as we continue to natively rebuild <a href="https://blog.cloudflare.com/cloudflare-acquires-bastionzero/"><u>BastionZero</u></a>’s technology into Cloudflare’s Access for Infrastructure service!</p> ]]></content:encoded>
            <category><![CDATA[Zero Trust]]></category>
            <category><![CDATA[Cloudflare Zero Trust]]></category>
            <category><![CDATA[Acquisitions]]></category>
            <category><![CDATA[SSH]]></category>
            <category><![CDATA[Cloudflare Access]]></category>
            <category><![CDATA[Cloudflare One]]></category>
            <category><![CDATA[Compliance]]></category>
            <guid isPermaLink="false">KUIHP5Rgyl2H3pGVE6m99</guid>
            <dc:creator>Sharon Goldberg</dc:creator>
            <dc:creator>Ann Ming Samborski</dc:creator>
            <dc:creator>Sebby Lipman</dc:creator>
        </item>
    </channel>
</rss>