<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Annais Molina Fuentes</title>
    <description>The latest articles on DEV Community by Annais Molina Fuentes (@devianntsec).</description>
    <link>https://dev.to/devianntsec</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3909676%2F4aa1ed4c-e9c7-4922-9bc4-de33c85275e8.png</url>
      <title>DEV Community: Annais Molina Fuentes</title>
      <link>https://dev.to/devianntsec</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devianntsec"/>
    <language>en</language>
    <item>
      <title>CVE-2025-55182 · React2Shell: RCE en React Server Components via Prototype Pollution</title>
      <dc:creator>Annais Molina Fuentes</dc:creator>
      <pubDate>Sun, 03 May 2026 07:16:06 +0000</pubDate>
      <link>https://dev.to/devianntsec/cve-2025-55182-react2shell-rce-en-react-server-components-via-prototype-pollution-245f</link>
      <guid>https://dev.to/devianntsec/cve-2025-55182-react2shell-rce-en-react-server-components-via-prototype-pollution-245f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Este es un resumen. El análisis completo — walkthrough de la causa raíz, payload íntegro, framework de explotación, artefactos forenses y patch diffing — vive en blog.deviannt.com.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; El deserializador Flight de React evalúa como Promise cualquier objeto que tenga un método &lt;code&gt;.then&lt;/code&gt;, independientemente de su tipo real. Un atacante envenena &lt;code&gt;Object.prototype.then&lt;/code&gt; mediante un POST multipart manipulado, forzando al servidor a ejecutar JavaScript arbitrario a través del constructor de &lt;code&gt;Function&lt;/code&gt;. El resultado se exfiltra por la cabecera HTTP &lt;code&gt;X-Action-Redirect&lt;/code&gt;. Sin autenticación. Determinista. &lt;strong&gt;CVSS v3.1: 10.0 (Critical).&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  La superficie de ataque
&lt;/h2&gt;

&lt;p&gt;Los React Server Components (RSC) se estabilizaron en React 19 junto con las Server Actions — un modelo en el que los componentes de UI se ejecutan directamente en el servidor y se comunican con el cliente mediante una capa de serialización propia llamada el &lt;strong&gt;protocolo Flight&lt;/strong&gt;. Cuando el cliente invoca una Server Action, envía una petición POST multipart con un payload serializado. El servidor lo deserializa, ejecuta la acción y devuelve el resultado en streaming.&lt;/p&gt;

&lt;p&gt;El protocolo Flight no es JSON. Es un formato de streaming con chunks tipados. Su mecanismo central: si un objeto deserializado tiene una función &lt;code&gt;.then&lt;/code&gt;, el runtime lo resuelve como una Promise.&lt;/p&gt;

&lt;p&gt;Esa suposición es la raíz de esta vulnerabilidad.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Cualquier aplicación Next.js que use el App Router con React Server Components está afectada — la configuración por defecto desde Next.js 14. No es necesario que el desarrollador haya definido Server Actions explícitamente. La presencia de los paquetes RSC afectados es suficiente.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Causa raíz
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// VULNERABLE — React 19.0.0 / 19.1.0 / 19.1.1 / 19.2.0&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// comprobación conductual — bypasseable vía cadena de prototipos&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si un atacante escribe una función en &lt;code&gt;Object.prototype.then&lt;/code&gt;, todos los objetos planos del runtime la heredan. El deserializador ya no puede distinguir una Promise real de un objeto contaminado — e invoca &lt;code&gt;new Function(_prefix)&lt;/code&gt; sobre contenido controlado por el atacante.&lt;/p&gt;

&lt;h2&gt;
  
  
  La cadena de explotación
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reconocimiento&lt;/strong&gt; — identificar una aplicación Next.js con React 19.0.0–19.2.0 y App Router. Cualquier endpoint que procese &lt;code&gt;multipart/form-data&lt;/code&gt; con cabecera &lt;code&gt;Next-Action&lt;/code&gt; es un objetivo válido. No se necesita ruta específica ni conocimiento previo de la estructura de la aplicación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Construcción del payload&lt;/strong&gt; — body multipart donde &lt;code&gt;__proto__:then&lt;/code&gt; envenena &lt;code&gt;Object.prototype&lt;/code&gt;, &lt;code&gt;_formData.get&lt;/code&gt; se redirige a &lt;code&gt;$1:constructor:constructor&lt;/code&gt; y &lt;code&gt;_prefix&lt;/code&gt; transporta el JavaScript a ejecutar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Envío de la petición&lt;/strong&gt; — un único POST al root con &lt;code&gt;Next-Action: x&lt;/code&gt;. El WAF ve una petición multipart bien formada y la reenvía sin inspeccionarla. No se activan firmas de inyección estándar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluación en el servidor&lt;/strong&gt; — el deserializador Flight encuentra un objeto con &lt;code&gt;.then&lt;/code&gt; (heredado del prototipo contaminado). Llama a &lt;code&gt;new Function(_prefix)&lt;/code&gt;. Ejecuta el código del atacante.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exfiltración&lt;/strong&gt; — el resultado de &lt;code&gt;execSync()&lt;/code&gt; se interpola en el digest del error &lt;code&gt;NEXT_REDIRECT&lt;/code&gt;. Next.js lo convierte en un &lt;code&gt;307&lt;/code&gt; con &lt;code&gt;X-Action-Redirect: /login?a=&amp;lt;output&amp;gt;&lt;/code&gt;. Se decodifica el parámetro.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Sin inyección de shell. Sin subida de archivos. Sin autenticación. Una sola petición POST.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5lavfzjmxxxuz6k2b8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5lavfzjmxxxuz6k2b8p.png" alt="RCE básico: whoami, id y uname -a ejecutados sobre el servidor Node.js vulnerable." width="800" height="372"&gt;&lt;/a&gt; &lt;em&gt;RCE básico: whoami, id y uname -a ejecutados sobre el servidor Node.js vulnerable.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;El payload completo, el one-liner mínimo con &lt;code&gt;curl&lt;/code&gt; y el framework de explotación completo &lt;code&gt;react2shell.py&lt;/code&gt; — con módulos para shell interactiva persistente, exfiltración de variables de entorno, defacement y denegación de servicio selectiva — están documentados en &lt;a href="https://blog.deviannt.com/es/cve-2025-55182-react2shell-rce-react-server-components/" rel="noopener noreferrer"&gt;blog.deviannt.com.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  El parche
&lt;/h2&gt;

&lt;p&gt;Publicado simultáneamente en las tres ramas activas de React 19: &lt;strong&gt;19.0.1&lt;/strong&gt;, &lt;strong&gt;19.1.2&lt;/strong&gt;, &lt;strong&gt;19.2.1&lt;/strong&gt; (3 de diciembre de 2025).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;// VULNERABLE
&lt;span class="gd"&gt;- resolvedValue = resolvedValue[key];
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;// PARCHEADO
&lt;span class="gi"&gt;+ if (!resolvedValue.hasOwnProperty(key)) break;
+ resolvedValue = resolvedValue[key];
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los guards con &lt;code&gt;hasOwnProperty&lt;/code&gt; bloquean el recorrido de la cadena de prototipos. El atacante ya no puede llegar al constructor de &lt;code&gt;Function&lt;/code&gt; mediante &lt;code&gt;$1:constructor:constructor&lt;/code&gt;. La cadena se rompe en su primer eslabón.&lt;/p&gt;

&lt;p&gt;Verifica si tu instalación está parcheada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"const r = require('react'); const [maj,min,pat] = r.version.split('.').map(Number); &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
  console.log('React:', r.version, (maj===19 &amp;amp;&amp;amp; (min&amp;lt;2||(min===2&amp;amp;&amp;amp;pat&amp;lt;1))) ? '❌ VULNERABLE' : '✓ Parcheado')"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔴 &lt;strong&gt;Advisory post-parche:&lt;/strong&gt; Las versiones inicialmente parcheadas (19.0.1, 19.1.2, 19.2.1) contienen dos CVEs derivados: CVE-2025-55184 (DoS, CVSS 7.5) y CVE-2025-55183 (Exposición de Código Fuente, CVSS 5.3). Actualiza a &lt;strong&gt;19.0.2, 19.1.3 o 19.2.2&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Una lección estructural
&lt;/h2&gt;

&lt;p&gt;La confianza conductual es más débil que la confianza de identidad. La comprobación &lt;code&gt;typeof obj.then === 'function'&lt;/code&gt; fue diseñada para ser flexible y funcionar con cualquier thenable. Esa flexibilidad es precisamente lo que la hizo explotable. Cuando un límite de seguridad depende del &lt;em&gt;comportamiento&lt;/em&gt; de un objeto en lugar de su &lt;em&gt;identidad&lt;/em&gt;, la prototype pollution se convierte en una llave maestra.&lt;/p&gt;




&lt;p&gt;Análisis completo → &lt;a href="https://blog.deviannt.com/es/cve-2025-55182-react2shell-rce-react-server-components/" rel="noopener noreferrer"&gt;blog.deviannt.com · CVE-2025-55182 · React2Shell&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;— devianntsec // investigación en seguridad &amp;amp; más&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>javascript</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>CVE-2025-55182 · React2Shell: RCE in React Server Components via Prototype Pollution</title>
      <dc:creator>Annais Molina Fuentes</dc:creator>
      <pubDate>Sun, 03 May 2026 07:12:47 +0000</pubDate>
      <link>https://dev.to/devianntsec/cve-2025-55182-react2shell-rce-in-react-server-components-via-prototype-pollution-29pd</link>
      <guid>https://dev.to/devianntsec/cve-2025-55182-react2shell-rce-in-react-server-components-via-prototype-pollution-29pd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This is a summary. The full analysis — root cause walkthrough, complete payload, exploitation framework, forensic artifacts, and patch diffing — lives at blog.deviannt.com.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; React's Flight deserializer evaluates any object with a .then method as a Promise, regardless of its actual type. An attacker poisons Object.prototype.then through a crafted multipart POST, forcing the server to execute arbitrary JavaScript via the Function constructor. The result is exfiltrated through the X-Action-Redirect HTTP header. No authentication required. Deterministic. CVSS v3.1: 10.0 (Critical).&lt;/p&gt;

&lt;h2&gt;
  
  
  The attack surface
&lt;/h2&gt;

&lt;p&gt;React Server Components (RSC) stabilized in React 19 alongside Server Actions — a model where UI components execute directly on the server and communicate with the client through a custom serialization layer called the &lt;strong&gt;Flight protocol&lt;/strong&gt;. When a client invokes a Server Action, it sends a multipart POST with a serialized payload. The server deserializes it, executes the action, and streams the result back.&lt;/p&gt;

&lt;p&gt;The Flight protocol is not JSON. It is a streaming format with typed chunks. Its core mechanism: if a deserialized object has a &lt;code&gt;.then&lt;/code&gt; function, the runtime resolves it as a Promise.&lt;/p&gt;

&lt;p&gt;That assumption is the root of this vulnerability.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Any Next.js application using the App Router with React Server Components is affected — the default since Next.js 14. Explicitly defined Server Actions are not required. The presence of the affected RSC packages is sufficient&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Root cause
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// VULNERABLE — React 19.0.0 / 19.1.0 / 19.1.1 / 19.2.0&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// behavioral check — bypassable via prototype chain&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If an attacker writes a function to Object.prototype.then, every plain object in the runtime inherits it. The deserializer can no longer distinguish a real Promise from a poisoned plain object — and calls new Function(_prefix) on attacker-controlled content.&lt;/p&gt;

&lt;h2&gt;
  
  
  The exploit chain
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reconnaissance&lt;/strong&gt; — identify a Next.js app running React 19.0.0–19.2.0 with App Router. Any endpoint processing &lt;code&gt;multipart/form-data&lt;/code&gt; with a &lt;code&gt;Next-Action&lt;/code&gt; header is a valid target. No specific route or prior knowledge of the app structure needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payload construction&lt;/strong&gt; — multipart body where &lt;code&gt;__proto__:then&lt;/code&gt; poisons &lt;code&gt;Object.prototype&lt;/code&gt;, &lt;code&gt;_formData.get&lt;/code&gt; is redirected to &lt;code&gt;$1:constructor:constructor&lt;/code&gt;, and &lt;code&gt;_prefix&lt;/code&gt; carries the JavaScript to execute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request delivery&lt;/strong&gt; — single POST to root with &lt;code&gt;Next-Action: x&lt;/code&gt;. WAFs see a well-formed multipart request and forward without inspection. No standard injection signatures triggered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-side evaluation&lt;/strong&gt; — the Flight deserializer encounters an object with .then (inherited from the poisoned prototype). Calls new Function(_prefix). Executes attacker code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exfiltration&lt;/strong&gt; — &lt;code&gt;execSync()&lt;/code&gt; output is interpolated into a &lt;code&gt;NEXT_REDIRECT&lt;/code&gt; error digest. Next.js converts it into a &lt;code&gt;307&lt;/code&gt; with &lt;code&gt;X-Action-Redirect: /login?a=&amp;lt;output&amp;gt;&lt;/code&gt;. Decode the parameter.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;No shell injection. No file upload. No authentication. One POST request.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5lavfzjmxxxuz6k2b8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5lavfzjmxxxuz6k2b8p.png" alt="Basic RCE: whoami, id and uname -a executed on the vulnerable Node.js server." width="800" height="372"&gt;&lt;/a&gt; &lt;em&gt;Basic RCE: whoami, id and uname -a executed on the vulnerable Node.js server.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The complete payload structure, the minimal &lt;code&gt;curl&lt;/code&gt; one-liner, and the full exploitation framework &lt;code&gt;react2shell.py&lt;/code&gt; — with modules for persistent interactive shell, environment variable exfiltration, defacement, and selective denial of service — are documented at &lt;a href="https://blog.deviannt.com/cve-2025-55182-react2shell-rce-react-server-components/" rel="noopener noreferrer"&gt;blog.deviannt.com.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The patch
&lt;/h2&gt;

&lt;p&gt;Released simultaneously across three React 19 branches: 19.0.1, 19.1.2, 19.2.1 (December 3, 2025).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;// VULNERABLE
&lt;span class="gd"&gt;- resolvedValue = resolvedValue[key];
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;// PATCHED
&lt;span class="gi"&gt;+ if (!resolvedValue.hasOwnProperty(key)) break;
+ resolvedValue = resolvedValue[key];
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;hasOwnProperty&lt;/code&gt; guards prevent prototype chain traversal. The attacker can no longer reach the &lt;code&gt;Function&lt;/code&gt; constructor through &lt;code&gt;$1:constructor:constructor&lt;/code&gt;. Chain broken at the first link.&lt;/p&gt;

&lt;p&gt;Verify your installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"const r = require('react'); const [maj,min,pat] = r.version.split('.').map(Number); &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
  console.log('React:', r.version, (maj===19 &amp;amp;&amp;amp; (min&amp;lt;2||(min===2&amp;amp;&amp;amp;pat&amp;lt;1))) ? '❌ VULNERABLE' : '✓ Patched')"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔴 &lt;strong&gt;Post-patch advisory:&lt;/strong&gt; The initial patch versions (19.0.1, 19.1.2, 19.2.1) also contain two follow-on CVEs: CVE-2025-55184 (DoS, CVSS 7.5) and CVE-2025-55183 (Source Code Exposure, CVSS 5.3). Update to 19.0.2, 19.1.3, or 19.2.2.&lt;/p&gt;

&lt;h2&gt;
  
  
  One structural lesson
&lt;/h2&gt;

&lt;p&gt;Behavioral trust is weaker than identity trust. The &lt;code&gt;typeof obj.then === 'function'&lt;/code&gt; check was designed to be flexible and work with any thenable. That flexibility is exactly what made it exploitable. When a security boundary depends on an object's behavior rather than its identity, prototype pollution becomes a master key.&lt;/p&gt;




&lt;p&gt;Full analysis → &lt;a href="https://blog.deviannt.com/cve-2025-55182-react2shell-rce-react-server-components/" rel="noopener noreferrer"&gt;blog.deviannt.com · CVE-2025-55182 · React2Shell&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;— devianntsec // security research &amp;amp; beyond&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>javascript</category>
      <category>react</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
