The Node.js project has released
a number of security updates to fix, among other vulnerabilities, a
remote-code-execution bug affecting programs that use Brotli compression. And,
in case any programmers who use compiled languages thought they could relax, the musl libc project has also announced a
new vulnerability: an out-of-bounds
write that could potentially lead to remote code execution, although that
has not been demonstrated.
Using temporary credentials is a security best practice to reduce the risk from credentials getting compromised. With AWS IAM Roles Anywhere, now your workloads outside of Amazon Web Services (AWS) will be able to access AWS resources by obtaining temporary security credentials in AWS Identity and Access Management (IAM). IAM Roles Anywhere relies on public key infrastructure (PKI) to establish trust between your AWS account and certificate authorities that issues certificates to your workloads that run outside AWS. PKI involves the generation, distribution, and verification of digital certificates through public key encryption.
In this post, we show you some best practices, considerations, and solutions for integrating your PKI with IAM Roles Anywhere. In this post, we assume that you have a foundational knowledge of IAM and IAM Roles Anywhere. For more information, see the IAM and IAM Roles Anywhere documentation.
Note: As of July 2026, AWS Certificate Manager (ACM) supports exportable public certificates that can be used on workloads outside AWS (containers or on-premises). Additionally, ACM supports the ACME protocol for automated certificate issuance and renewal on external workloads. These capabilities complement IAM Roles Anywhere by providing both identity (using X.509 certificates for IAM Roles Anywhere) and encryption (using ACM public/private certificates) for hybrid environments.
X.509 certificates for workload identity
If you’re running multiple workloads in your infrastructure, you’re probably assigning unique workload identities and specific user permissions. In this environment, your workloads can use PKI tools like Active Directory Certificate Services to centrally manage and monitor the identities and permissions at scale. The same principles of segregating unrelated workloads apply to PKI and IAM Roles Anywhere. If you’re issuing certificates to your workloads today, they can probably be used with IAM Roles Anywhere without any changes.
As shown in Figure 1, the access boundary and permissions of Workload A can be very different from that of Workload B when accessing AWS resources, depending on the organization’s needs. In such scenarios, it’s recommended to establish a unique machine identity for each workload. This can be achieved by issuing a separate X.509 certificate with distinct identity attributes signed by your certificate authority (CA). To set up an effective PKI solution for machine identities, you must configure the appropriate certificate attributes and anchor the trust model around those attributes.
Figure 1: Workloads outside of AWS accessing AWS services
Temporary access credentials
Workloads with distinct CA signed X.509 certificates exchange certificates with IAM, as shown in Figure 2, to get temporary security credentials for the session. The signature validation process used by IAM Roles Anywhere verifies the certificate issuer and the subject before providing the temporary credentials. To enable this verification process, an IAM Roles Anywhere trust model should be set up by either uploading your CA’s digital certificate as a trust anchor or by referencing an existing AWS Private Certificate Authority (AWS Private CA) certificate. In this post, we focus on using a trust anchor.
To help define the appropriate scope for the temporary credentials, it’s recommended to configure distinct IAM roles for each workload to assume. Workloads must use X.509 certificates issued by your CA. These certificates are exchanged with IAM to get temporary security credentials for the session.
Figure 2: Getting temporary credentials from IAM using CA issued X.509 certificate
Set up IAM roles with the IAM Roles Anywhere trust policy that will be assumed by your non-AWS workload.
Configure profiles with IAM roles and attach relevant session policies. This instructs IAM Roles Anywhere to use your selected session policies whenever you request credentials for any of the attached roles.
Trust model
The trust model is centered around setting up the right trust relationship between IAM Roles Anywhere and your CA by configuring a trust anchor. The model connects the role, the IAM Roles Anywhere service principal, and identities encoded in X509 certificates that are issued by a CA.
Certificate attributes
Certificates are a binary record with encoded key/value pairs as certificate attributes. Let’s look at one of the X.509 certificates to understand different attributes of certificate that are important for IAM Roles Anywhere PKI validation.
The following is an example PEM encoded certificate file that can be decoded with tools like openssl.
-----BEGIN CERTIFICATE-----
MIIKOzCCCSOgAwIBAgIQDlnyZvBeKjgHm1jJ++CbgDANBgkqhkiG9w0BAQsFADBE
MQswC ...........
-----END CERTIFICATE----
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
e0:5d:b7:72:56:fa:75:e3
Signature Algorithm: ecdsa-with-SHA512
Issuer: C=US, ST=CA, L=San Francisco, O=MyCompany Inc., OU=AC, CN=MyCompany CA
Validity
Not Before: Sep 15 00:09:17 2023 GMT
Not After : Sep 18 00:09:17 2023 GMT
Subject: C=US, O=MyCompany, OU=eCommerce, CN=WorkloadA
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (384 bit)
pub:
04:3b:74:e1:68:06:fa:b0:3d:fe:f7:5f:74:80:05:
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:ecommerce.mycompany.com, DNS:*ecommerce.mycompany.com, URI:spiffe://mycompany.com/workload/ecommerce
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Key Usage: critical
Digital Signature
Signature Algorithm: ecdsa-with-SHA512
30:64:02:30:19:a7:a0:33:49:ce:e1:cb:76:6e:c0:f3:c5:66:
IAM Roles Anywhere extracts values from the subject Common Name (CN), issuer, and Subject Alternative Name (SAN) fields of the authenticating certificate and makes them available for policy evaluation through the sts:sourceIdentity and principal tags. When configuring your PKI, set short validity periods on the certificates issued to workloads. Short-lived certificates limit the window of exposure if a certificate is compromised and reduce the need for active revocation.
Note: An empty Subject CN in a certificate isn’t supported by IAM Roles Anywhere.
Trust policy and effective permissions of credentials
IAM Roles Anywhere clients fetch temporary credentials for IAM Roles using the API method CreateSession. To successfully authorize this API call, the IAM role trust policy should trust the IAM Roles Anywhere service principal as shown in the following example.
As a security best practice, consider using additional condition statements to evaluate the session PrincipalTag attributes extracted from the certificate to further restrict authorization of temporary credentials. If the workloads have ephemeral certificates with a dynamic subject CN, then the issuer or SAN principal tags can be used to define condition statements in the trust policy. The trust anchor shown in the preceding trust policy helps establish the trust between IAM Roles Anywhere and the CA in your PKI.
Plan for trust anchor placement
Depending on the CA platform, you can configure one or more intermediate certificates in your PKI certificate hierarchy, as shown in Figure 3. The certificate level the trust anchor is placed at affects which end-entity certificates IAM Roles Anywhere accepts, and therefore which workloads are authorized to assume a role. To create a trust anchor, export the certificate bundle for the issuing CA certificate from your external CA platform in PEM-encoded format and upload it to the trust anchor console.
Figure 3: Certificate hierarchy in an external PKI
See the Solution deployment section to onboard a sample solution and verify your certificate bundle.
Fine-grained access control is vital for security because it allows organizations to precisely define and restrict permissions, minimizing the risk of unauthorized access and data breaches. The effective permissions of the temporary security credentials are an intersection of resource-based, identity-based, and session policies as shown in Figure 4. By setting up the trust anchor and profile configuration in IAM Roles Anywhere with session policies, you can limit the permissions for each session.
Figure 4: Effective permissions of session credentials
Credential helper
To obtain temporary security credentials from IAM Roles Anywhere, use the credential helper tool. This tool is compatible with the credential_process feature available across the AWS SDKs. The credential helper manages the process of obtaining temporary security credentials using IAM Roles Anywhere and returns them in JSON format. The private key of the workload and its CA signed certificate are the two critical parameters provided to the credential helper tool. To use this tool, you need both an end-entity certificate and a trust anchor created in IAM Roles Anywhere. As of December 2024, the credential helper (version 1.4.0 and later) supports Trusted Platform Module (TPM) 2.0.
The following is an example of how to obtain temporary security credentials:
When credential-process is used with AWS SDKs, the temporary credentials are stored in memory and refreshed automatically. However, the AWS Command Line Interface (AWS CLI) invokes credential-process on every command. Each invocation creates a new IAM Roles Anywhere session, which adds latency to every CLI call. To avoid this delay when using the AWS CLI, we recommend using the update command, which writes refreshed credentials to a file that the CLI reads on each invocation without calling credential-process again.
When you use update, credentials are written to a credential file on disk and any user or process who can read the credential file might be able to read and use those AWS credentials, so it’s recommended to use serve unless your business has a specific use case that needs to read AWS credentials from a file. The serve command can be used to vend temporary credentials through an endpoint running on the local host using the same URIs and request headers as Instance Metadata Service Version 2 (IMDSv2). When using serve, no AWS configuration files are needed because the AWS SDKs can discover the server endpoint.
Just-in-time compared to short-lived certificates as workload identities
To help mitigate the risk around the exposure of your business-critical resources to compromised certificate user sessions, it’s recommended to use certificates with just-in-time credentials or short-lived access credentials. Just-in-time certificates are issued by a CA for immediate use for authentication on a system or application. The CA uses the roles and policies defined in IAM to determine when, and under what conditions, a workload can establish a session. With just-in-time access, admins don’t have to worry about revoking access if the users’ access roles change. Because the access credentials are recreated for each access request, any role changes can be applied in real time. Just-in-time access requires support from your CA, so verify compatibility with your CA before implementing it.
It’s recommended to tailor the validity periods for short-lived certificates to align with business requirements, workload lifecycle, and your organization’s risk tolerance. AWS Private CA offers a short-lived CA mode specifically designed for certificates with validity periods under 7 days. This mode is priced at $50 per month (compared to $400 per month for general-purpose CA mode), making it cost-effective for high-volume, ephemeral workload identities such as containers and serverless functions. For more information, see AWS Private Certificate Authority and How to use AWS Private CA short-lived certificate mode. See Zero trust on AWS for information about how short-lived credentials support a zero trust architecture.
Best practices for private key storage
Safeguarding private keys is of paramount importance in any environment. A private key is created by the certificate owner when requesting certificates with a Certificate Signing Request (CSR). The CA providing your certificate doesn’t create or have your private key. In fact, it’s recommended that no one outside your administrators should ever be given access to this material. Guardrails should be implemented to make sure the keys aren’t stored in an online repository.
Using the credential helper with IAM Roles Anywhere, you can integrate with PKCS #11-compatible modules. For implementation details, see How to implement cryptographic modules to secure private keys used with IAM Roles Anywhere. With the credential helper (version 1.1.0 and later), IAM Roles Anywhere supports PKCS #11 integration, so you can use private keys stored in hardware security modules (HSMs) or software-based secure stores and avoid storing them to disk. Additionally, as of December 2024, the credential helper supports Trusted Platform Module (TPM) 2.0, enabling private keys to be generated inside the TPM and marked as non-exportable. With TPM-backed keys, the private keys can’t be extracted even if the workload host is compromised. This is the strongest private key protection available for on-premises and hybrid workloads using IAM Roles Anywhere.
If your organization doesn’t implement PKCS #11–compatible modules, IAM Roles Anywhere supports credential helper version 1.0.5 for X.509 certificates and private keys stored in macOS and Windows certificate stores. This delegates the signing operations to keys stored within those OS-specific certificate stores. In Windows, both CryptoAPI and Cryptography API: Next Generation (CNG) are supported; in macOS, Keychain is supported. In these environments, the private key will never be directly readable, and the signing operation would be delegated to the secure store instead, which will improve security posture of your environment. If you have multiple certificates, then use the --cert-selector flag of the credential helper tool to search for a specific certificate (and associated private key) through the certificate subject, issuer, and serial number. The corresponding keys are x509Subject, x509Issuer, and x509Serial, respectively. These keys can be specified either through a JSON file format or through the command line. The following is an example of both approaches:
If you want to use a JSON file, it should be similar to this:
If the preceding example is placed in a file called selector.json, it can be specified with the --cert-selector flag through file://path/to/selector.json.
The same certificate selector argument can be specified through the command line as shown in the following:
Monitoring certificate expiry in PKI is crucial for maintaining secure communication, because expired certificates can lead to authentication failures, leaving systems vulnerable to unauthorized access. Compliance and regulatory requirements often mandate timely renewal of certificates, making monitoring certificate expiry essential to avoid legal penalties and maintain organizational integrity.
Using IAM Roles Anywhere, you can receive notifications for CA certificate expiry and end-entity certificate expiry. IAM Roles Anywhere can send metrics, events, and notifications through multiple notification channels as shown in the following table:
Best practices for trust anchor certificate rotation
Consider rotating your certificates using blue/green deployments to seamlessly roll out new certificates without affecting service availability. Use automation to integrate certificate rotation testing in your blue/green deployment pipeline. See the sample AWS CloudFormation template in the Solutiondeployment section to build your automation pipeline.
As shown in Figure 5, two trust anchors have been created; one for each environment. Using this approach, you can test the certificate rotation process in a controlled staging environment before applying it to the production environment, thus reducing the risk of certificate-related outages.
Figure 5: Trust anchor certificate rotation in blue/green deployment
Important: The SessionDurationSeconds value must not exceed the IAM role’s MaxSessionDuration setting, which defaults to 3600 seconds (1 hour). If you request a longer session than the role allows, the CreateSession API returns an error. The companion template keeps both values in sync by setting the role’s MaxSessionDuration to the same parameter value. If you configure the role separately, update its MaxSessionDuration to match your desired session length. For more information, see IAM Roles Anywhere CreateSession API.
If the workload’s subject CN (WorkloadSubjectCN) doesn’t match the x509Subject CN of the authenticating certificate, the CreateSession call is denied. The same conditional verification applies to WorkloadIssuerCN and WorkloadSANCN.
The template enforces three certificate attribute conditions in the IAM trust policy: issuer CN, subject CN, and SAN CN must all match the values configured as parameters. Additionally, the trust policy scopes role assumption to the specific trust anchor Amazon Resource Name (ARN), preventing other trust anchors in the same account from assuming that role.
Conclusion
In this post, we discussed how AWS IAM Roles Anywhere, empowered by X.509 certificates, introduces a dynamic and secure way to manage workload identities and issue temporary access credentials. By understanding the trust model, using certificate attributes, and implementing fine-grained authorization, organizations can gain granular control over the effective permissions of these credentials.
The choice between just-in-time and short-lived certificates as workload identities depends on your specific requirements.
Adhering to best practices for private key storage is essential to maintain the integrity of your security infrastructure. Regularly rotating trust anchor certificates helps ensure the long-term trustworthiness of your system.
As you embark on your journey to implement IAM Roles Anywhere and integrate it with your PKI, remember that a well-architected approach to certificate management is a cornerstone of robust and resilient cloud security.
For additional deployment guidance, see Planning for your IAM Roles Anywhere deployment, which covers end-to-end deployment planning including network architecture, monitoring, and operational considerations.
If you have questions, you can start a new thread on AWS re:Post or reach out to AWS Support.
NVIDIA kicked off GTC 2026 with its lead keynote. Among the highlights for this year’s European NVIDIA tradeshow are the DSX POD, a server-in-a-container, as well as a slew of software updates for the NVIDIA ecosystem
We last looked in on hash-based integrity
checking for kernel modules just over a year and half ago. Since that time,
the patch
set has undergone multiple revisions. At the 2026 Linux Plumbers Conference
(LPC), Thomas Weißschuh described the need for kernel-module integrity
guarantees while still providing reproducible builds, how his patches implement that, and some ideas for possible
further work.
Over the past year, while Git traffic grew exponentially, 99.99999% of the Git repositories on GitHub began living in two places at once: our own data centers and Azure. The rest are among the busiest on the platform, and they’re held back by just one thing: a 25ms round trip.
In an earlier blog post, we laid out the two principles behind our next-generation storage architecture:
Minimize coordination
Decouple storage from compute
In this post, we’ll look at the immediate bridge between our old design and our new one. We’ll talk about how a change to the way our quorum serializes writes gets the busiest repositories into Azure, and how that same step opens the door to replicas that keep no persistent state of their own.
How we got here
The timing and shape of the move were driven by the agentic shift: rapidly growing traffic, a hard ceiling on the power capacity of our data centers and the surrounding geographical region, and physical supply chain constraints. At the beginning of our migration, the remaining capacity with all possible expansion gave us enough time to migrate safely, but not enough to do it slowly.
While we had prototyped new architectural approaches for scaling Git on cloud infrastructure, changing the storage architecture and the hosting platform at the same time, under that growth, carried too much risk. Given our scale and how critical the service is to the community, we needed to sequence the work carefully: move the data first, then evolve the architecture once it arrived.
Git operations are a Tier 0 service: they’re a core function of GitHub, and nearly everything in GitHub depends on the repository data. That meant the data, services, and every dependency had to move first. The first copy of a repository landed in Azure’s Central US region in August 2025. Today, most repositories have two of their five replicas in Azure, and Azure serves about half of Git traffic. For most of that time, Azure absorbed our growth while our own data centers held steady.
During the migration, traffic follows the data. Most repositories have five replicas to balance durability, availability, and scale. To minimize read latency, Spokes uses preferential routing to direct traffic to a replica in the same region and availability zone as the request. As replicas move to Azure, the share of the traffic that can be served from Azure grows with each one, until the last replica arrives and the old region stops receiving requests entirely. Every repository goes through this process:
No repository left behind
So, what about the remaining 0.00001% of repositories?
In our current architecture, a repository hosted in more than one region has a lower write throughput ceiling. Spokes’ quorum only needs a majority to commit a write, but it waits for every healthy replica to respond (up to a timeout) before moving on, so slow replicas delay every write rather than falling behind. In practice, that means the slowest healthy replica sets the latency of every write, and because each write holds a repository-wide lock until it commits, it also sets the throughput ceiling. Once a replica lives in the target Azure region, it’s about 1,000 miles from our data centers, making each network round trip around 25ms, and a write requires multiple round trips. A repository already near its throughput ceiling can’t absorb that on every serialized write; it would fall further behind with every push.
This is where our first principle, minimizing coordination, comes into play. Specifically for this case: don’t serialize what doesn’t need to be. Git’s consistency requirements apply to each reference individually. Once the server accepts an update to a reference, no client should see an older value afterward, only that value or a newer one. That holds whether the update is a fast-forward, a force push, or a delete. But in most cases, updates to different references don’t depend on each other and can be applied independently.
So, we’re changing the scope of the quorum from the whole repository to individual references.
Holding a repository-wide lock for the entire reference update, round trips included, turns the quorum into a single, unordered request queue with one write in flight at a time. Each write in that queue takes as long as the slowest healthy replica. As the write rate grows, so does the queue, and each write waits longer than the one before it.
With per-reference serialization, only writes that contend on a shared reference must wait for each other. In practice, most writes to a repository touch different references—for example, agents and developers pushing to their own branches—so they no longer wait on each other. Each write still experiences the cross-region latency but writes to different references can be in flight at the same time. That removes the single bottleneck on the repository. We can visualize how queueing and timeouts build up by comparing the two approaches side by side under similar load:
These changes raise a repository’s write throughput ceiling roughly in proportion to how many references are being written at once, and get the last remaining repositories into Azure. In internal testing with realistic traffic, writes to different references consistently saw 3–4x higher throughput at lower latency.
Scaling reads on their own
Most repositories are heavily read-skewed, with somewhere between 100 and 1,000 reads for every write. Today, reads and writes hit the same replicas, so they compete for the same resources and can’t be scaled independently.
Decoupling storage from compute changes that. Once repository data is durably stored in Azure Blob Storage and updated with each incoming write, we can begin to decouple read traffic from the write quorum, and independently scale the compute needed for each. For example, reads would benefit from far more in-memory cache than we give them today, but that memory is also needed for compaction. Once they’re separated, each gets its own configuration.
The first step is making object storage a member of the quorum, but a special one that we call a virtual replica. The compute that represents it is our first fully ephemeral node. It serves as a bridge to object storage, streaming incoming writes and serving no reads. Because it’s a member of the quorum, a write isn’t acknowledged until it’s durable in object storage.
That adds a little latency to each write, but just like the cross-region round trip, per-reference serialization keeps it from becoming a throughput bottleneck. The virtual write replica also coalesces transactions on disjoint references into a single set of network I/Os to object storage, so a busy repository pays for one round trip across many concurrent writes instead of one per write. For now, the virtual write replica also handles compaction, and read replicas inherit the compacted state.
With the virtual write replica in place, we can scale out as many virtual read replicas as a repository needs, on demand. Each read replica warms its cache from Azure Blob Storage and starts taking read traffic without joining the quorum, using object storage as the source of truth and reconciling its local state against it in the background.
This step unlocks significant read scale. In internal testing, our distributed load testing harness routinely found ceilings in the current architecture. Against virtual read replicas, the harness hit its own limits first. It also comes with a few challenges that are solved in subsequent steps:
Virtual read replicas start out reconciling with object storage in the background, which makes them a good fit for some read workloads but not all of them. Serving every kind of read requires moving that reconciliation in-line, fetching only the reference state and data that changed since the replica last caught up.
While we’ve incrementally increased write throughput by shifting to a per-reference model, the quorum remains the bounding factor for increasing further.
How can we push write throughput further?
What comes next
The GitHub of today was built on the Spokes quorum, and over the years Spokes has become much more than a quorum coordinator. It’s also an intelligent routing and load balancing layer, a unified API that internal clients use to access and transact repository data at well over 100 billion operations per day, and a collection of background systems we call “sweepers” that handle repository placement, repair, and rebalancing between storage nodes.
The vast majority of what lives under the Spokes service umbrella applies just as well to the new architecture as it does to the existing one. But we also recognize that the commit protocol that has taken GitHub to a billion repositories won’t take it to the next billion and beyond.
We’re not done yet. With these steps in place, the next limit is write throughput. Every write still waits on replicas that each hold a full copy of the repository, yet very little of a write actually needs to be ordered. Git objects are immutable and named by their contents, so they can be stored without anyone agreeing on them. What’s left is small, and the hard part is ordering it as fast as possible without moving the bottleneck somewhere else. Designing for that on a whiteboard is one thing. Doing it underneath a billion repositories that developers and agents are writing to around the clock is another. Getting there forced us to rethink the second-order effects too, like where durable reference state lives and how compaction and garbage collection scale.
Agent traffic isn’t slowing down, and each of these steps gives repositories more headroom as it lands, without waiting for the end state.
Coming next week: At GitHub Universe and in the final post in this series, we’ll take a tour through that end state, what it does for write throughput, the second-order problems we had to solve to get there, and why there’s still a (small) consensus group somewhere in the stack.
Thanks to Brian Celenza for their contributions to this post.
За политолозите и социолозите се знае, че колкото и пъти да сбъркаме с прогнозите си, дойде ли време за избори, се пробваме отново и отново. В началото на 2026 г. смело предвидих как едва ли някога отново ще имаме победител с абсолютно мнозинство, само за да бъда опроверган от „Прогресивна България“ на Радев три месеца по-късно. Сега отново опитвам да прогнозирам изхода от президентския вот, макар оперативната обстановка (както казваше навремето мой колега политолог с познанства в МВР) да е динамична и пълна с черни лебеди – всъщност дронове, които от време на време потапят българските кораби.
Нашата власт в усърдието си да не обиди никого според мен е на път да реагира като пиратите от анимацията „Астерикс в Британия“, които накрая сами продъниха кораба си, само и само да не свършат тази работа галите. В нашия случай (с висока степен на вероятност, както биха казали управляващите) – руснаците.
Да се върнем обаче на изборите за президент. Макар някои от основните партии и коалиции (ГЕРБ–СДС и ДПС), както и други по-малки, но обичайни заподозрени (например „Синя България“) да не сметнаха за необходимо да участват в тях, кандидатите за държавен глава са рекорден брой – 28. Социологическите проучвания обаче отличават трима от тях с по-големи шансове, а подкрепата за още няколко е що-годе видима.
С уговорката, че това не са прогнози кой ще победи, а „моментна снимка“ на обществените нагласи.
Като фаворит в битката влиза Илияна Йотова, която изпълнява длъжността президент след оставката на Радев, с кандидат-вицепрезидент Кирил Вълчев, а като основен съперник се очертава двойката на Андрей Гюров и Георги Кандев. И двете кандидатури са издигнати от инициативни комитети, макар зад тях да застават партии. Както каза Йотова, тя разчита на най-старата (БСП) и най-младата партия („Прогресивна България“). Зад Гюров са наскоро разделилите се ПП и ДБ, които обаче са заедно в негова подкрепа. Според социологическите изследвания Гюров и Кандев не само привличат симпатизантите, но и популярността им надхвърля общата подкрепа на двете политически сили за евентуален предсрочен парламентарен вот.
На трето място агенциите посочват тандема Костадин Костадинов и Петър Волгин от партия „Възраждане“, а зад тях са подобните им по убеждения двойки, водени от Радостин Василев („Меч“) и Ивелин Михайлов („Величие“). Демократичното пространство не изневерява на традицията да вади алтернативни на основните си кандидати в лицето на Иван Христанов и Николай Ненчев. В надпреварата участват и вечни претенденти като Волен Сидеров, проф. Александър Томов, Венци Чикагото, както и наистина екзотични кандидатури като Ваня Великова и Величка Георгиева – последното можем да го кажем като скоропоговорка. Тези Кубертенови участници в голямата си част нямат шанс не само за победа, а дори за балотаж, но стават за разпространение на руски опорни точки. Ако приемем мрачната хипотеза, че активността на много от тях зависи от един център, опитващ да доминира публичната среда, можем да окачествим стратегията на този център с английската поговорка, че мяташ всичко по стената с надеждата нещо да залепне.
Йотова – когато милостта се окаже недостатък
Илияна Йотова влезе в кампанията с институционална тежест и внушителен инициативен комитет, в който се включиха както личности със значителен авторитет – като проф. Христо Пимпирев и Симеон Идакиев, така и призраци от миналото, като Красимир Каракачанов от ВМРО и Красимир Премянов от Съюза на тракийските дружества, който по времето на Жан Виденов беше лидер на парламентарната група на БСП и минаваше за един от силните хора в партията.
От самото начало обаче набраната инерция заскърца заради разкритията, че Йотова е помилвала наркотрафикант. По-късно се разбра, че това не е единичен случай. Тя прехвърли отговорността за решението си на медицинска комисия. Така, без да иска, сама се сведе до ролята на прословутата автоматична писалка, която президентът на САЩ Доналд Тръмп не спира да използва като подигравка срещу предшественика си Джо Байдън, както постъпи дори пред китайския си колега Си Дзинпин.
Оставам с впечатлението, че умението да се справя в състезателната обстановка не е особено силна страна на Илияна Йотова
и тя до голяма степен очаква коронация на изборите. В този стил беше и интервюто ѝ пред Георги Любенов – в помещение, напомнящо тронна зала. Такава увереност придава тежест, но издава и известно високомерие.
Кирил Вълчев беше избран за кандидат-вицепрезидент, за да добави интелектуална тежест към кандидатурата на Йотова. Директор на БТА, възпитаник на НГДЕК, дългогодишен журналист, умеещ да говори красиво. На този фон изцепката му, че ще се бори с арабските цифри, е покъртителна. Може би на фона на общия патриотарски популизъм героичната кауза за борба в защита на кирилицата от несъществуващи врагове, подета от президентката, е хитър ход. Добавянето на цифрите към враговете обаче го превръща във фарс.
Според социолозите подкрепата на Илияна Йотова е над 40%, а според някои прогнози доближава 50%. На пръв поглед това звучи озадачаващо, тъй като „Прогресивна България“ позагуби част от подкрепата си, традиционните националисти върнаха някои от гласовете, дадени напролет за Радев, и въпреки това изглежда, че действащата президентка върви към сходен или по-висок резултат. Това може да се обясни с прогнозираната по-ниска избирателна активност. При такова развитие е възможно Илияна Йотова да има по-нисък резултат от партията на Радев като абсолютен брой гласове, но да има същия или дори по-висок дял от подадените бюлетини.
Основен актив на настоящата президентка са умерените русофили,
които искат да следват максимата, приписвана на цар Борис III (без да има доказателства, че той я е изрекъл) – „Винаги с Германия – никога против Русия“. За тях политиката на „Прогресивна България“ и лично на президентката Йотова е реванш след последните години на подкрепа за Украйна, като в същото време те не желаят да се загърбят напълно ЕС и НАТО, както искат симпатизантите на „Възраждане“. Дали тази позиция е разумна, е спорно, но тя, изглежда, намира сериозна подкрепа сред гласоподавателите, така че носи дивиденти на двойката Йотова – Вълчев.
Основният негатив на Йотова е, че доколкото е свързвана с Радев, върху нея се прехвърлят известни имиджови щети от провала в борбата с поскъпването – основен бич за избирателите у нас и по света. Самият спад и отказът от гласуване, наблюдавани от социолозите, сочат, че се оформя недоволство, което при евентуален балотаж може да избие срещу Йотова.
Гюров – кандидатът, от когото ПП и ДБ имаха нужда
Не е тайна, че „Продължаваме промяната“ и „Демократична България“ разчитат на електорат, който трудно би ги напуснал заради популистка формация, но почти невъзможно е периферията им да се разшири. Яростната антикорупционна реторика и реторическото „влизане с бутонки“ на опонентите, характерно както за Асен Василев от ПП, така и за Ивайло Мирчев от „Да, България“, надъхва симпатизантите, но може да отблъсне колебаещите се.
От тази гледна точка изборът на Андрей Гюров се оказа великолепен.
Той защитава позициите на ПП и ДБ убедено, но разчита на спокойна, експертна реторика, говори, без да повишава гласа си, демонстрира двустранна комуникация, при която общува с избирателите, а не ги назидава отгоре. Последното е видно и от клиповете, които споделя. В тях се вижда, че Гюров успява да запази самообладание дори при агресивен противник от другата страна. Защитава ясни проевропейски и прозападни позиции, но като че ли опитва да убеди и колебаещите се в тях, а не разчита на назидателното „трябва да мислите така“.
Като минус на Андрей Гюров може да се отчете, че експертният му маниер на говорене често не е особено увлекателен.
Понякога думите му не може да се обобщят накратко и така да достигнат и до хората с по-повърхностен интерес към политиката.
По-сериозен гаф беше прословутото интервю, в което Гюров се затрудни да посочи агресора във войната с Иран. Но това се случи относително рано в кампанията и остана на заден план на фона на положителното му като цяло излъчване. Компетентността на кандидата за вицепрезидент Георги Кандев беше подложена на съмнение, но номинирането му има потенциал да привлече избиратели на ГЕРБ, които предвид миналото на Бойко Борисов симпатизират на образа на строг полицай с чувство за хумор.
За момента данните показват, че Андрей Гюров има доста висок прогнозен резултат – между 20 и 30%. Ако се потвърди на изборите, това ще означава, че задачата да бъдат привлечени бивши „сини“ избиратели, отишли в ГЕРБ, е по-скоро изпълнена, при все многото знакови лица от партията, подкрепили Йотова. В случай че резултатът на кандидатите на ПП и ДБ прехвърли 30%, а Йотова и Вълчев паднат под 40%, това би направило балотажа по-трудно предвидим. Чисто инерционно настроенията ще се насочат към Гюров и Кандев и тогава може да сработят механизми, които излизат извън механичното пресмятане кой от другите към кого би се присъединил. Йотова ще трябва да разчита най-вече на избирателите на „Възраждане“, но при сходна ситуация на последните местни избори в София Костадин Костадинов отказа да подкрепи Ваня Григорова.
Костадинов пред Волгин – его или стратегия?
„Възраждане“ преживя тежък удар на парламентарните избори, когато едва прескочи бариерата от 4%. Ходът с включването на Петър Волгин в президентската надпревара обаче е нож с две остриета. Ярък глас на соцносталгиците у нас, Волгин има потенциал да откъсне част от подкрепата за Йотова. Като кандидат за вицепрезидент обаче този му потенциал е ограничен. И тук идва въпросът дали Костадин Костадинов не направи грешка, като не пусна Волгин например с Нешка Робева, за да играе ако не за победа, то поне за балотаж.
За Костадинов обаче оцеляването на партията му и лично на него като неин лидер може да е от по-голямо значение от доброто представяне конкретно на тези избори.
С личното си участие той се опитва да стабилизира доверието към „Възраждане“ и конкретно към себе си, да увеличи резултата спрямо парламентарния вот и да успокои симпатизантите си. Със сигурност много от избирателите на партията таят надеждата, че ще успеят да повторят постижението на Сидеров и „Атака“ отпреди двайсет години, макар социолозите да не дават сериозни индикации, че това е възможно. В миналото партия „Възраждане“ често е била подценявана, както често се случва с партии, вотът за които се смята за обществено непрестижен. Напоследък обаче симпатизантите ѝ са по-скоро горди с нея, така че този ефект е минимизиран. Ако има скрит популистки вот, той според мен ще се прелее другаде.
Имат ли скрит потенциал Ивелин и Радостин?
Най-трудно е да се предвиди резултатът на малки партии – понякога той носи изненади. В миналото и „Меч“, и „Величие“ са показвали, че могат да постигнат по-висок резултат от видимия за социолозите. Причините според мен са в достигането до нетрадиционни избиратели.
Радостин Василев има ясна и простичка стратегия. Яко хейт и много хумор, ако ми позволите разговорния език. Той се стреми да оплюе всичките си опоненти и да нарича с цветисти изрази управляващите. Силата му е, че може да изговори това, което би било недопустимо за Андрей Гюров например. Разчита и на подигравки, което се харесва на българите, видно от резултатите на „Има такъв народ“ в миналото, от чиито редици изгря и Василев. Възможно е да привлече гневни млади мъже с антикорупционната си реторика и да постигне по-висок резултат от предвиденото. Но е трудно да си го представим на балотаж.
Ивелин Михайлов има още по-странна стратегия. Неговата бизнес империя като че ли рухна, но той използва това, за да си създаде образа на мъченик. Голямата му слабост е, че не може да говори особено интересно и увлекателно. Това се компенсира с абсурдни клипчета, правени с изкуствен интелект и разпространявани в интернет от структури на „Величие“. В тях той се изявява като Нео от „Матрицата“, бори се с триглав змей, носещ лицата на политици от статуквото и т.н. Звучи смешно, но има потенциала да привлече електорат, който традиционно не е изкушен от политиката, но би могъл да бъде привлечен да се включи в изборите посредством похвати от комиксовата култура. Това прави прогнозния му резултат сходен с този на Радостин Василев – по-висок от първоначално очаквания, но недостатъчен за нещо значимо.
От останалите кандидати известен потенциал на теория има Иван Христанов, но ми се струва, че неговата реторика е популистка, а се цели в електората на демократите, които не харесват този похват. Николай Ненчев така и не набра инерция, която да му даде видимост. Волен Сидеров е в ролята на Уди от „Играта на играчките“ – захвърлен настрани, защото вече не е интересен заради по-новите модели на Баз светлинна година, каквито са Костадинов, Радостин Василев и Ивелин Михайлов. Не виждам перспективи и при червените кандидатури, например на проф. Александър Томов и Георги Димов, при положение че този вот ще се концентрира в Йотова.
Разбира се, всичко казано дотук е поне до известна степен гледане на кафе и гадаене на боб, макар и в рамките на политологичния анализ.
Клишето в случая е вярно – само хората могат да изберат какво искат за държавата си. Вариантите в крайна сметка са два.
Първият, който може да се осъществи с избора на Илияна Йотова, е пълна концентрация на властта в кръга около „Прогресивна България“, която де факто зае мястото на залязлата БСП. Това ще постави България в ситуация, в която тя никога не е била в демократичната си история – в разгара на Виденовата зима Петър Стоянов беше избран за президент, а по време на тройната коалиция Станишев нямаше абсолютно мнозинство в парламента. Ако този вариант се осъществи, стабилността му много ще зависи от това дали от „Прогресивна България“ имат капацитета да управляват успешно – нещо, в което след първата си половин година във властта не успяват да убедят.
Вторият вариант е да имаш авариен бутон. Ако нещо се обърка, например ако неуспешната финансова политика доведе до нови масови протести, хората да имат съюзник в Президентството. Подусловието обаче е дали този съюзник да е популист – позицията, на която навремето Жорж Ганчев не успя да се изкачи, или системен демократичен играч, отказващ да зачеркне всичко постигнато през последните десетилетия, какъвто, изглежда, е Андрей Гюров.
One of our biggest challenges has been developing Tyr while the
Rust kernel abstractions and driver interfaces are also being
developed. As the driver interfaces are naturally revised and
improved, we have rewritten Tyr several times to adapt to the
larger Rust ecosystem. This not only makes progress much slower
than it would be with a mature API, but also stalls progress for
capabilities, such as job scheduling, while the abstraction is
properly designed, reviewed, tested, and merged upstream.
But working in this evolving environment is also precisely where
Tyr is able to provide the most value. As a user of these new Rust
abstractions, Tyr helps to expose their requirements and
limitations.
Nix flakes are an
experimental feature of the Nix package-management
tool designed to build projects in a more self-contained and reproducible
way. Despite the feature’s experimental status, it has become increasingly
popular for open-source projects to publish flake.nix files that offer
predefined development environments and build automation even when those
repositories may not offer an upstream package or module for the NixOS Linux distribution. Although
Nix flakes have a complicated history, and the path for stabilization is
uncertain, flakes can provide useful capabilities for projects that choose to
include them.
Today, we are expanding our web application firewall (WAF) by adding two new capabilities: full transaction detections and response rules. Full transaction detections evaluate each HTTP request alongside its response to identify evidence of exploitation. It helps answer both "Does this request look malicious?" and "What happened when the application handled it?" Response rules can then block the origin’s response before it reaches the requester.
These are valuable protections because the latest frontier models are uncovering vulnerabilities buried deep in widely used software, giving defenders clarity on what to fix — and attackers new paths to exploit. The recent php2shell vulnerability shows the stakes: a flaw in a common software component can put applications across the Internet at risk. AI agents scanning for vulnerabilities can be extremely persistent, adapting payloads using feedback, and chaining vulnerabilities, credentials, and permissions. An application's response can reveal whether an attempt worked and give an attacker information that helps them go deeper.
Inspecting incoming requests remains essential for stopping recognizable attacks before they reach an application. But some threats become clear only when the request is considered alongside what the origin returns. A suspicious input followed by a response exposing sensitive information tells a different story from the same input followed by a rejection or an error.
With these new capabilities, customers can use Cloudflare-managed protections or build their own policies combining request and response properties. This extends our always-on application security framework, with detection results available in Security Analytics to support investigation. Our first managed protections using this capability address the recently disclosed php2shell vulnerability.
And the best part? We are making these new capabilities generally available to all Cloudflare customers, including Free plans.
Request inspection is not enough
Cloudflare WAF protects websites and APIs with managed rules, custom rules, and rate limiting. Managed rules provide protection for known attack techniques and vulnerabilities while custom rules let teams create their own policies using parameters such as an IP address, URL path, headers, and request body. These controls operate at the request level to stop exploits or unwanted traffic from reaching the origin.
For many threats, this is the right place to act. However, treating every suspicious request as a confirmed exploit creates a difficult choice. Broad request signatures can catch more potential attacks, but they can also show “false positives”, such as matching legitimate traffic — which then breaks the applications. Deploying only rules that do not trigger false positives reduces that risk, but can leave more room for more ambiguous traffic to reach the server.
The response provides the missing evidence. Cloudflare can now correlate it with the request that produced it, so detections can account for the outcome of the entire HTTP transaction.
As an illustrative example, consider an application that lets users download files. An attacker manipulates the file parameter to request a private configuration file outside the permitted directory:
GET /download?file=../../config/database.ini
Request inspection can recognize this path traversal attempt and block it before it reaches the application. The request alone, however, cannot establish whether the application would expose the file. It might reject the request, ignore the traversal, or return an error. If the request reaches the origin, a response like this provides additional evidence:
200 OK
Content-Type: text/plain
[database]
username=app_service
password=EXAMPLE_SECRET
Full transaction detection provides a missing piece: it can correlate the attempted file access with response content characteristic of a private configuration file. Configuration-like text can legitimately appear in documentation or example downloads; combining it with a traversal attempt provides stronger evidence of sensitive data exposure than either signal alone. A response rule can then replace the origin response with a Cloudflare WAF block page and HTTP 403 before it reaches the requester, effectively blocking the exploit by preventing sensitive information from reaching the attacker.
Detection and mitigation are separate by design
Full transaction detection extends the always-on detection framework we introduced earlier this year. Detections analyze traffic and attach metadata to the request and response, rules then decide what to do with those results.
Separating those jobs gives customers visibility before they design a policy. Security teams can inspect detections in their own traffic, understand which endpoints and signatures are involved, and choose the response that fits their application. Similar to the approach for the request-based Attack Signature Detection, the outcome of the detections are stored in fields that can be accessed in the response custom rules or used in managed detections to block traffic.
Mirroring the request detection fields, the following new fields are added to our platform:
Field
Description
cf.waf.signature.response.confidence
Confidence values associated with matching signatures
cf.waf.signature.response.categories
Categories associated with matching signatures
cf.waf.signature.response.ref
Signature reference IDs, up to 10
The first full transaction detections focus on exploit confirmation for high profile vulnerability. It correlates suspicious input with response signals that indicate an exploit may have succeeded.
We will expand coverage over time by supporting other use cases, including detecting data exposure and exfiltration signals. This is important for the Internet beyond any one application: defenses can distinguish probing from evidence of impact, while detection of exposed data and services can reach customers that do not have a dedicated security team tuning every WAF rule.
Create rules on the response
Detecting evidence of exploitation is most useful if you can act on it in real time. Response custom rules turn full transaction detections into inline protection by blocking a matching origin response before it reaches the requester, although it cannot undo actions already performed at the origin.
Security teams can now combine request and response properties with detection results to decide which responses to block. When a blocking rule matches, Cloudflare replaces the origin response with a WAF block page or a custom response.
Response phase controls are available in the Cloudflare dashboard at the bottom of the Security > Security Rules page, with both managed protections and custom rules.
We have released both managed and custom rules to all plans, including Free plans. Over time, we will follow the same approach we use for request detections, where managed detections for free plans focus on high-profile vulnerabilities, while paying customers get a richer catalog of detections.
Managed detections
All customers get the protection of the full array of transaction detections through the Cloudflare Managed Response Firewall Default ruleset, which is designed for a simple one-click deploy and simplified configurability. When a signature matches, the managed detection will block the response and return a standard WAF block page.
You can edit the Cloudflare Managed Response Firewall Default scope to run detections only on a portion of their applications, for example by excluding or restricting the detection to a specific path. Paying customers can use detection fields in custom response rules to create more tailored policies.
Custom rules
Custom response rules are designed to give customers full control of the rule logic. A useful rule can stop an administration interface from being exposed when an authentication gateway has not marked the request as internal. For example:
http.request.uri.path starts_with "/admin" and not http.request.headers["x-internal-user"][0] eq "true" and http.response.code eq 200 and http.response.headers["content-type"][0] contains "text/html"
This blocks only when an unauthenticated request targets `/admin` and the origin actually returns a successful HTML administration page. It does not block ordinary authentication failures, redirects, or non-administration traffic.
All customers can create up to three custom response rules supporting Log and Block actions. The fields and functions available in response to custom rules mirrors what your plan gives you access to in request custom rules already. Creating rules on the response body is not yet available.
Following the Attack Signature Detection approach, paying customers also have access to the outcome of attack detections through the cf.waf.signature.response.* fields listed above. These fields can be combined with other parameters (such as a hostname, URL path, source IP, request header) to enable protection on a single path, or limit the policy to application-specific context. We are currently rolling out the response fields to all our accounts. If you don’t have access to them yet, please contact your account team.
Investigating matching requests
When a managed or custom response rule logs or blocks a transaction, the event is available in Security Events. This means responders can trace any detection back to the full context of the request and the specific rule that took action.
At the moment, both request-only rules and full-transaction rules are shown together in the same analytics page. In Security Events, the events generated by response rules are part of the Managed Rules or Custom Rules service. You can filter events belonging to a specific rule ID in the relative rule list section.
Get started today
Full transaction detection is generally available for all zones proxying traffic through Cloudflare. To verify that you’re protected, go to Security > Security Rules in the Cloudflare dashboard. If you want to customize your policy, start by reviewing full transaction detections in Security Analytics, then create the response phase policy that fits your application.
Today, Calif.io, Wiz, OpenAI and Quarkslab disclosed twovulnerabilities in PHP, tracked as CVE-2026-109618 and CVE-2026-109619 and known as php2shell. The vulnerabilities affect all web servers running PHP 5.4 or later and they may allow an attacker to cause denial of service, remote code execution, and data exposure when an application processes specially crafted HTTP traffic.
Cloudflare has been part of a coordinated effort to deploy mitigations to protect the Internet, working with PHP foundation, OpenAI and Wiz among others. Cloudflare has developed and deployed web application firewall (WAF) protections since early October 2026, which were deployed about 9 hours ahead of public disclosure. Starting on October 21 3:02 am UTC, Cloudflare customers using our free or paid WAF were protected by default against php2shell.
Cloudflare successfully deployed multiple mitigations for all its customers while the vulnerability was leaked before the official release date and we observed attack traffic targeting our customers. We observed how attackers were mutating the attack payload to try to bypass our protections by tracking the volume of matches and cross-referencing with the rule logic.
Protecting against php2shell required more than standard request-based rules. Request data alone does not always provide enough evidence to distinguish an exploit from legitimate traffic. The origin’s response adds context, helping identify whether an exploit succeeded while reducing the risk of false positives.
To deliver this protection, we developed full transaction detection, a new Cloudflare WAF capability that combines signals from the request and response within the same HTTP transaction. Response rules can then block a matching origin response before it reaches the requester. The php2shell protections are the first managed detections we have released using this capability.
Customers should patch their PHP repos even with WAF protections providing an additional layer of defense-in-depth mitigation. Our security analysts continue monitoring attack activity and update the rules when and if new techniques and variations emerge in the hours and days ahead. You can track new rules in the changelog.
The protections are available and deployed automatically on all plans with WAF deployed, including Free users.
What we know about the vulnerabilities
PHP is used by almost 70% of websites. The php2shell vulnerabilities affect the PHP runtime itself and can allow attackers to execute malicious code on vulnerable servers, expose customer data, or disrupt services. Because PHP underpins widely used platforms such as WordPress and Magento, these flaws could potentially affect a large number of applications across the Internet.
The two vulnerabilities involve how PHP handles memory when something goes wrong while processing a HTTP request. Normally, PHP allocates memory to store the data it needs to process a request, then releases it when that work finishes. If processing stops unexpectedly, for example because it runs out of memory, PHP fails to clean up the memory safely. These vulnerabilities arise when PHP handles an error and then tries to use data that was not fully set up or memory that has already been released.
An attacker can send specially crafted HTTP requests to trigger these conditions. Large requests are one way to put memory under pressure, but the problem goes beyond consuming server resources. By manipulating the data PHP encounters in this invalid memory, an attacker may be able to crash a PHP process, expose sensitive information, or execute code provided by the attacker.
The two vulnerabilities differ in when the unsafe memory access happens:
Vulnerability
What goes wrong
CVE-2026-109618
PHP runs out of memory and interrupts its work before some internal data has been properly initialized. During cleanup of that request, PHP may use this unfinished data as though it were valid.
CVE-2026-109619
A fatal error interrupts a request, leaving PHP holding references to memory that is released when the request ends. When the same PHP process handles a later request, it may follow those outdated references and access memory that is no longer valid and expose sensitive data.
These flaws are in the PHP runtime, so updating website code or a plugin(s) alone does not fix these vulnerabilities. Administrators need to update the PHP software running their applications. If a hosting provider manages PHP, ask the provider to apply the security update.
Administrators can follow the PHP advisory for affected versions and remediation instructions. Keep Cloudflare WAF protections enabled while patching. Restricting unnecessary uploads and limiting upload sizes can also reduce exposure, but these measures do not replace the PHP fix.
New rules
For Free customers, new rules have been released under the Cloudflare Managed Free Ruleset (Ruleset ID 77454fe2d30c4220b5701f6fdfb893ba). Free customers don’t have to take any actions to enable the protection. To override the ruleset behavior you can refer to our documentation.
Rule Description
Rule ID
Generic Rules – Anomalous Execution – 1
4e315666e8e344cdb64119a3b5ccf32f
Generic Rules – Anomalous Execution – 2
00c10e6cc4da4bd08722adeebcd95984
Generic Rules – Anomalous Execution – 3
48ddf592361e4fdb97a8a85982dab691
Generic Rules – Anomalous Execution – 4
3556683d512a47f2937899c524b1a4c6
Generic Rules – Anomalous Execution – 5
da07c85852e34625bb478496302ede46
Generic Rules – Anomalous Execution – 6
19373a83abb840e18ab3ce5a7975ce1b
Generic Rules – Anomalous Execution – 7
07f0b6ddaabf40b1b2042dade8d613fa
Protection for paid plans has been released as part of the Cloudflare Managed Ruleset (Ruleset ID efb7b8c949ac4650a09736fc376e9aee). If you are on a Professional, Business, or Enterprise plan, review your Managed Ruleset deployment to confirm it’s deployed block mode.
Rule Description
Rule ID
Generic Rules – Anomalous Execution – 1
c1d409ad838f47f59446f21cc438d5dd
Generic Rules – Anomalous Execution – 2
f9a45927414245e3a64bb12d0a0c2f64
Generic Rules – Anomalous Execution – 3
771c654ae1154d4daa72f4e1545d163c
Generic Rules – Anomalous Execution – 4
217005865f0145f392300bac212afcc9
Generic Rules – Anomalous Execution – 5
38efdb17ea594501bb55a1d71867b12e
Generic Rules – Anomalous Execution – 6
4148ae686fdb4d01be673fab9d9c073d
Generic Rules – Anomalous Execution – 7
1389aa259617437392ce149c48143645
To better identify exploit attempts, Cloudflare developed full transaction detection, a new WAF capability that analyzes both sides of the same HTTP transaction. While some malicious payloads can be identified using the request alone, the response contains useful signals that can be used to create rules with higher confidence, reducing false positives. A matching full transaction rule can block the origin response before it reaches the requester. Learn how it works in our full transaction detection blog post.
The following rules have been deployed to the new Cloudflare Managed Response Firewall Default for customers on all plans, including Free:
Rule Description
Rule ID
Default block for High confidence Signatures
afffe22785674c80a31875c848d2242a
Note: rule descriptions will be updated soon.
Review events and customize protection
To analyze blocked requests, visit Security > Security Analytics > Events. Filter by the rule IDs in the table above and inspect the matched request, action, and path. Events identify whether the action came from a managed or custom rule. Customers who need to tailor the protection can update the scope of the Managed Ruleset to the parts of an application where it is relevant.
Update PHP and keep the protection enabled
Cloudflare customers using our Managed Ruleset are protected by default. We recommend following the advisory recommendation and applying the vendor update to your PHP repos as soon as possible while keeping the WAF protection enabled as an additional protection. Our WAF analysts will continue to update protections as new techniques emerge.
The PHP project has published PHP
versions 8.5.12, 8.4.27, 8.3.36 and 8.2.35 to address
two critical vulnerabilities that could allow unauthenticated remote code
execution.
Who is at risk: all PHP installations serving web requests,
including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. We
consider the risk highest for mod_php, with a demonstrated exploit where an
unauthenticated request can trigger the attack before any application code
runs.
The vulnerabilities:
RCE via OOM corruption, CVE-2026-109618 (GHSA-w8hw-w9fx-j79w): out-of-memory
handling can interrupt PHP while internal request data is only partially initialized. Request cleanup may then treat the invalid data as valid.
RCE via stale global state, CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp): request-owned
internal state can survive after its backing memory has been freed. A later
request handled by the same worker may use that stale state before normal
initialization resets it.
PHP versions older than 8.1 will not receive updates from the project, though
the project has provided some patches for PHP
7.4, PHP
8.0, and PHP
8.1 to assist in creating backports. According to the
announcement, Linux distributions and vendors received patches in advance, so
updated packages should be coming soon.
Greg Kroah-Hartman has announced the release of the 7.2.12, 6.18.58, 6.12.114, and 6.6.160 stable kernels. Each contains a number
of important fixes; users are advised to upgrade.
AI can write code and pass the bar exam, but it still struggles to buy a pair of shoes online.
That’s because websites were built for humans, not agents. Most agents that shop for someone today work from a site’s HTML — they look at the page, guess which button does what, click, and try again when they get it wrong. This process is slow, uses a lot of tokens, and something as seemingly innocuous as a theme change can break it.
Enter WebMCP: a browser standard from Google that gives AI agents structured tools on a page, like search_products. Instead of hunting for buttons, the agent calls the exact tool it needs directly, making shopping faster, cheaper, and far more reliable. Because WebMCP is still an experimental proposed browser standard in early preview, it’s currently available behind experimental Chrome flags (chrome://flags/#enable-webmcp-testing), in Chrome Origin Trials, in some agentic browsers, and across developer environments like Cloudflare Kitesurf.
In August, we launched edge implementation of WebMCP in beta. Turn it on, and Cloudflare injects a tiny script at the edge to make those tools available automatically, without site owners writing a single line of code.
Commerce.com, a flexible commerce platform built for the age of AI, already uses Cloudflare to run their almost 100,000 domains. So when the preview came out, they asked: Can we turn this on for all of our stores at once?
Here’s why Commerce.com wanted WebMCP, how we built edge-level opt-outs to give every merchant control, and what we learned along the way.
Why Commerce.com wanted WebMCP
Kristina Pototska, Product Management Director at Commerce.com, explains why this matters for storefronts:
“Merchants keep asking us how they can keep up with agentic shopping. When a shopper asks an agent to find something, merchants want their store to be in the answer. They want to keep the customer, keep control of the checkout, and do it without rebuilding their site. WebMCP helps with all three. The agent gets real tools to search products, check details, build a cart, and get a checkout link, so it doesn’t have to guess its way around the page. The human shopper stays on the merchant’s site, and the merchant keeps the relationship.
We wanted to turn this on in a secure way, and without asking merchants to edit their theme or do anything by hand. That’s where the Cloudflare partnership worked perfectly.
WebMCP also works side by side with our server-side MCP, and together they cover the different ways people shop with agents. Server-side MCP supports agents that connect to a store directly, like an assistant helping someone shop across several sites. WebMCP supports agents that work in the shopper’s browser. It’s the same set of shopping tools in both cases, so merchants don’t have to choose between the two or manage them separately.”
Under the hood, this integration relies on two key principles. First, the WebMCP tools execute directly inside the shopper's active browser session on the storefront's domain, ensuring the agent sees the same prices and cart. No credentials go to a third party, and the visit still happens on the merchant's site. Second, Cloudflare serves as the edge delivery layer for Commerce.com’s backend MCP server, proxying tool definitions and actions unchanged so merchants maintain full control over their tool logic.
What a shopper's agent sees
When visiting an enabled Commerce.com storefront, an AI assistant no longer has to guess how to navigate the site. Instead, it can instantly discover tools via WebMCP.
Suppose you tell your agent: "Find me a waterproof trail running shoe under $140 in size 10 and add it to my cart."
Without WebMCP: The agent attempts to simulate human clicks, only to get blocked by cookie banners, misinterpret variant drop-downs, or get tripped up by bot challenges that try to distinguish automated traffic from real customers.
With WebMCP: The agent detects the store's tools on document.modelContext and makes two clean calls:
Because the agent runs inside your active browser session on the store's domain, your cart updates in real time. Commerce.com’s backend MCP server determines the commerce flow: when you’re ready to complete the purchase, you click checkout yourself — keeping your payment details secure and leaving you in complete control of the final buy.
What we built together
When Commerce.com asked to turn on WebMCP across almost 100000 storefronts, we ran into a practical challenge: WebMCP was originally designed as a single on-or-off switch for an entire domain zone.
Commerce wanted to enable our mcp-server-client toolpack, which acts as an edge bridge — proxying tool definitions and requests directly from Commerce.com’s backend MCP server to the visitor's browser. Because Commerce.com uses Cloudflare for SaaS to host thousands of merchant vanity domains on shared zones, we needed a way to deliver this platform-wide while giving individual store owners an easy way to opt out.
1. On for all stores on Commerce.com, with an opt-out for each merchant
Commerce.com turns WebMCP on for their main zone, then adds a rule at the edge that checks merchant metadata. If a merchant flips the "opt-out" switch in their Commerce.com dashboard, Cloudflare bypasses WebMCP for that specific storefront automatically:
Because Cloudflare evaluates these rules at the edge before serving the page, an opted-out store gets zero extra latency, no remote lookups, and no injected scripts.
2. Tailored endpoints and safe fallbacks
As with any preview release, working with a partner in the real world revealed a few practical details we hadn't accounted for:
Custom MCP paths: When the mcp-server-client toolpack was enabled, our bridge originally expected to find every site's MCP server at /mcp. Commerce.com’s server lives at /api/mcp. To handle this, we added a configurable MCP URL setting at the zone level. When this is set, we pass the custom path into the injected script tag:
Seamless fallbacks: If a store's MCP server is offline or a customer's browser doesn't support WebMCP, the script exits. The storefront loads normally and human shoppers aren't affected.
What's next
We'll keep investing in WebMCP as the standard evolves, starting with helping agents find a site's tools more easily. Cloudflare and Commerce.com will continue to work together to make shopping with agents fast, reliable and safe for both merchants and shoppers.
If you're at Cloudflare Connect in San Francisco on October 21, 2026, come see us at Getting your storefront agent ready for peak season, a panel discussion featuring Kristina Pototska (Product Management Director, Commerce), Justis Blasco (CTO and Co-Founder, Popmenu), Ross Harvey (Head of Infrastructure, Fruugo), and Josh Mills (VP of Engineering, Gopuff).
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.