<?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: karnVen</title>
    <description>The latest articles on DEV Community by karnVen (@karnven).</description>
    <link>https://dev.to/karnven</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3828435%2F81c8cb3d-ad26-4059-afac-37246c44893e.jpeg</url>
      <title>DEV Community: karnVen</title>
      <link>https://dev.to/karnven</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karnven"/>
    <language>en</language>
    <item>
      <title>When the Prime Minister of Japan Told Websites to Go Offline and My Tech Lead Froze Deployments: Inside PHP2Shell</title>
      <dc:creator>karnVen</dc:creator>
      <pubDate>Thu, 22 Oct 2026 18:59:16 +0000</pubDate>
      <link>https://dev.to/karnven/the-world-panic-when-japans-prime-minister-issued-an-update-or-shut-down-order-4dka</link>
      <guid>https://dev.to/karnven/the-world-panic-when-japans-prime-minister-issued-an-update-or-shut-down-order-4dka</guid>
      <description>&lt;p&gt;"No deployments for the next 10 days. Everything is frozen."&lt;/p&gt;

&lt;p&gt;That was the WhatsApp message from my tech lead yesterday.&lt;/p&gt;

&lt;p&gt;As a PHP developer working with Laravel and Drupal in our company, my day-to-day rhythm is straightforward: build new features, polish the UI/UX, document the changes, and hand off release notes to our server team to pull live directly into our company's on-premise local server.&lt;/p&gt;

&lt;p&gt;When my senior dropped that message into our team chat, I was genuinely baffled. I asked if our CI pipeline broke, if our on-premise rack had a power surge, or if we had hit some nasty dependency conflict.&lt;/p&gt;

&lt;p&gt;His reply was short: "Search PHP news today. Major core zero-day."&lt;/p&gt;

&lt;p&gt;At first, I assumed it was just another package bug or framework vulnerability—the kind where you run &lt;code&gt;composer update&lt;/code&gt;, bump a patch version, run tests locally, and move on.&lt;/p&gt;

&lt;p&gt;Then I started reading the security advisories and international news, and the scale of it hit me.&lt;/p&gt;

&lt;p&gt;It wasn't a package issue. It wasn't even a framework bug.&lt;/p&gt;

&lt;p&gt;It was PHP2Shell (CVE-2026-109618 &amp;amp; CVE-2026-109619)—a CVSS 9.2 Critical pre-authentication Remote Code Execution vulnerability sitting directly inside the C Zend Engine that powers approximately 70% of the entire web.&lt;/p&gt;




&lt;h2&gt;
  
  
  The International Alarm: An "Update or Shut Down" Directive from Tokyo
&lt;/h2&gt;

&lt;p&gt;While I was staring at my terminal, governments across the world were already mobilizing. &lt;/p&gt;

&lt;p&gt;In Tokyo, Japan's Prime Minister Sanae Takaichi took to public channels late Wednesday evening through the National center of Incident readiness and Strategy for Cybersecurity (NISC) with an unprecedented national emergency order: all public-facing infrastructure running PHP must apply security patches immediately, or proactively take services offline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2For9m50akdwk0c9fn7erl.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2For9m50akdwk0c9fn7erl.webp" alt="Japan's Prime Minister Sanae Takaichi" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Japan's Prime Minister Sanae Takaichi issued a nationwide directive ordering public and private infrastructure running PHP to update or take servers offline.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To show the severity of the threat, government portals and even the Prime Minister's personal official website were temporarily taken down for security auditing and runtime verification. Across Japan, major financial institutions and online platforms—including MUFG Bank, Mizuho, Japan Post Bank, and the digital media platform Niconico—instituted emergency maintenance windows to isolate their PHP backends.&lt;/p&gt;

&lt;p&gt;Across the globe, the United States Cybersecurity and Infrastructure Security Agency (CISA) added CVE-2026-109618 to its Known Exploited Vulnerabilities (KEV) catalog with an urgent federal binding operational directive. Meanwhile, France's ANSSI and Germany's BSI released critical notices warning that automated botnets were actively scanning IPv4 address space for vulnerable PHP endpoints.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Technical Deep Dive: What Actually Breaks in the C Zend Engine?
&lt;/h2&gt;

&lt;p&gt;To understand why this vulnerability has sent shockwaves through the engineering community, you have to look past Laravel and Drupal and look straight into native C.&lt;/p&gt;
&lt;h3&gt;
  
  
  It Strikes Before Your Application Even Boots
&lt;/h3&gt;

&lt;p&gt;In a modern PHP stack (like Laravel or Drupal served by Nginx and PHP-FPM), your application code does not wake up the moment an HTTP packet arrives.&lt;/p&gt;

&lt;p&gt;Before Laravel's &lt;code&gt;public/index.php&lt;/code&gt; or Drupal's bootstrap routines ever execute, PHP's Server API (SAPI) layer parses raw HTTP POST bodies, multipart/form-data boundaries, and query strings in native C. &lt;/p&gt;

&lt;p&gt;Because PHP2Shell exploits the memory routines during this initial C-level parsing phase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your route middleware never runs.&lt;/li&gt;
&lt;li&gt;Form request validation rules never evaluate.&lt;/li&gt;
&lt;li&gt;CSRF protection and authentication guards are completely bypassed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The attacker controls the machine before your PHP code even knows a request exists.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Race Condition in &lt;code&gt;Zend/zend_hash.c&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;At the center of the PHP runtime is the Zend HashTable—the underlying C data structure that powers associative arrays, global symbol tables, and parsed request parameters.&lt;/p&gt;

&lt;p&gt;Here is the vulnerable logic path inside the Zend Engine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* Zend/zend_hash.c - Internal Zend HashTable Insertion Routine */&lt;/span&gt;
&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;zend_always_inline&lt;/span&gt; &lt;span class="n"&gt;Bucket&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nf"&gt;zend_hash_find_bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HashTable&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;zend_string&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cm"&gt;/* Critical flaw: incrementing count before memory check */&lt;/span&gt;
    &lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;nNumUsed&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UNEXPECTED&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;nNumUsed&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;nTableSize&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;zend_hash_do_resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="cm"&gt;/* Triggered during memory limit exhaustion */&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cm"&gt;/* If zend_hash_do_resize() fails or aborts, 
     * this bucket pointer remains uninitialized in memory! */&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;arData&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;ht&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;nNumUsed&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the critical ordering flaw: &lt;code&gt;ht-&amp;gt;nNumUsed++&lt;/code&gt; increments the counter &lt;em&gt;before&lt;/em&gt; confirming that memory allocation succeeds.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Panic: &lt;code&gt;zend_bailout()&lt;/code&gt; and &lt;code&gt;longjmp()&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;When a server handles an incoming request, PHP enforces the &lt;code&gt;memory_limit&lt;/code&gt; configured in &lt;code&gt;php.ini&lt;/code&gt; (e.g., &lt;code&gt;128M&lt;/code&gt; or &lt;code&gt;256M&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;When an attacker sends a crafted multipart HTTP request with deeply nested boundaries or bloated headers, &lt;code&gt;zend_hash_do_resize()&lt;/code&gt; attempts to allocate more memory and hits &lt;code&gt;memory_limit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When PHP hits this wall, it does not throw a catchable PHP exception, nor does it perform clean C++ RAII object destruction. Instead, it triggers &lt;code&gt;zend_bailout()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Under the hood, &lt;code&gt;zend_bailout()&lt;/code&gt; uses the standard C library function &lt;code&gt;longjmp()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* Zend/zend_alloc.c */&lt;/span&gt;
&lt;span class="n"&gt;ZEND_API&lt;/span&gt; &lt;span class="n"&gt;ZEND_NORETURN&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;zend_bailout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cm"&gt;/* Immediately aborts call stack back to the request loop */&lt;/span&gt;
    &lt;span class="n"&gt;longjmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bailout&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;longjmp()&lt;/code&gt; function instantly unwinds the C call stack. It jumps straight out of the parsing routine, skipping all cleanup logic for the partially initialized HashTable bucket. The count &lt;code&gt;ht-&amp;gt;nNumUsed&lt;/code&gt; was already incremented, but the bucket it points to is left filled with uninitialized heap garbage.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Attack Surface: PHP-FPM Persistent Workers
&lt;/h3&gt;

&lt;p&gt;If PHP ran exclusively as a command-line script (CLI), the operating system would wipe the entire process memory space when the process terminated.&lt;/p&gt;

&lt;p&gt;However, in high-performance production environments running Nginx with PHP-FPM, worker processes stay alive across hundreds of consecutive requests (&lt;code&gt;pm.max_requests = 500&lt;/code&gt;) to avoid process fork overhead.&lt;/p&gt;

&lt;p&gt;When a worker survives a &lt;code&gt;longjmp&lt;/code&gt; bailout:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The corrupted HashTable remains in the persistent worker process memory.&lt;/li&gt;
&lt;li&gt;During request termination, &lt;code&gt;php_request_shutdown()&lt;/code&gt; traverses the HashTable to free resources, dereferencing the uninitialized bucket pointer.&lt;/li&gt;
&lt;li&gt;By grooming the heap with previous multipart chunks, the attacker controls the address stored in that pointer, steering execution directly into arbitrary shellcode (Pre-Authentication Remote Code Execution).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Non-Technical Explanation: The Hotel Receptionist, Fire Alarm, and Cleaning Crew
&lt;/h2&gt;

&lt;p&gt;If C pointer mechanics and memory offsets feel like a blur, here is an everyday analogy for how this vulnerability works in the real world:&lt;/p&gt;

&lt;p&gt;Imagine a busy 5-star hotel lobby:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Receptionist (PHP-FPM Worker):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
To keep check-ins moving fast, the receptionist doesn't get replaced after every guest. They stay at the front desk all day, greeting hundreds of visitors back-to-back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Hotel Ledger (Zend HashTable):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Whenever a guest checks in, the receptionist writes their room number and luggage tag into the front desk ledger.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Luggage Room Limit (&lt;code&gt;memory_limit&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The hotel has a strict rule: all luggage checked in for a single visit must fit into a designated storage room.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The Malicious Guest &amp;amp; The Fire Alarm (&lt;code&gt;zend_bailout&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
An intruder walks in carrying an enormous, strangely shaped tower of suitcases designed to fill the luggage room to the absolute ceiling. As the receptionist begins writing the ticket number in the ledger, the luggage room hits maximum capacity and a deafening fire alarm sounds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. The Fire Escape (&lt;code&gt;longjmp&lt;/code&gt;):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
In an emergency, the hotel protocol is absolute: drop everything and run out the fire escape immediately. The receptionist doesn't finish writing the room number, doesn't verify the baggage claim tag, and doesn't lock the luggage cabinet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. The Cleaning Crew (Request Shutdown):&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Once the alarm resets, the receptionist returns to the desk to greet the next customer. The cleaning crew steps in to tidy up from the previous guest. They open the ledger, see a half-written entry pointing to an unchecked locker, and blindly open whatever bag is tagged there. &lt;/p&gt;

&lt;p&gt;Inside that bag isn't guest clothing—it's the intruder's remote control, handing complete control of the hotel over to the attacker.&lt;/p&gt;


&lt;h2&gt;
  
  
  The AI Revelation: How a 20-Year-Old Bug Was Finally Found
&lt;/h2&gt;

&lt;p&gt;Perhaps the most astonishing aspect of PHP2Shell is its origin story.&lt;/p&gt;

&lt;p&gt;As reported by Reuters, this flaw lived silently inside the C Zend Engine codebase for over two decades. Human security researchers, core PHP maintainers, and commercial penetration testers had audited those exact C files thousands of times and missed it.&lt;/p&gt;

&lt;p&gt;Why did humans miss it? Because reproducing it required an extraordinary combination of edge cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hitting an exact memory boundary during HashTable bucket resizing.&lt;/li&gt;
&lt;li&gt;Intercepting the memory limit abort right at the point where &lt;code&gt;ht-&amp;gt;nNumUsed&lt;/code&gt; had been incremented but the memory block was not yet mapped.&lt;/li&gt;
&lt;li&gt;Tracking how persistent PHP-FPM process reuse preserved that tainted memory state across request lifecycles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was discovered using modern AI-assisted semantic fuzzing models capable of reasoning across asynchronous C call stacks and simulating memory states through &lt;code&gt;longjmp&lt;/code&gt; control transfers. Where human auditors saw standard boundary checks, AI reasoning models connected the state discrepancies across worker lifecycles.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Fix: What Every DevOps Team Needs to Do Right Now
&lt;/h2&gt;

&lt;p&gt;The PHP core security team responded with emergency patched releases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.2:&lt;/strong&gt; Upgrade to &lt;code&gt;&amp;gt;= 8.2.35&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.3:&lt;/strong&gt; Upgrade to &lt;code&gt;&amp;gt;= 8.3.36&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.4:&lt;/strong&gt; Upgrade to &lt;code&gt;&amp;gt;= 8.4.27&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.5:&lt;/strong&gt; Upgrade to &lt;code&gt;&amp;gt;= 8.5.12&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(Note: Older branches like PHP 7.4, 8.0, and 8.1 are officially End-of-Life and do not receive upstream security patches).&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The Critical Mistake Many Admins Make
&lt;/h3&gt;

&lt;p&gt;Running &lt;code&gt;apt update &amp;amp;&amp;amp; apt upgrade&lt;/code&gt; or updating your binary on disk &lt;strong&gt;does not fix the running vulnerability in RAM&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Because PHP-FPM workers stay loaded in memory, existing vulnerable workers will continue serving traffic until you explicitly restart the service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Restart PHP-FPM and your web server immediately&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart php8.2-fpm   &lt;span class="c"&gt;# Replace with your installed version&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your application runs inside Docker containers, rebuild without using cached layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose build &lt;span class="nt"&gt;--no-cache&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--force-recreate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Guided Resources: Where to Go Deep
&lt;/h2&gt;

&lt;p&gt;Rather than leaving you with a list of random links, here are curated guides and video walkthroughs to help you master these concepts:&lt;/p&gt;

&lt;h3&gt;
  
  
  Video Walkthroughs
&lt;/h3&gt;

&lt;p&gt;If you want to see how the Zend Engine organizes hash tables, zvals, and memory in native C, watch this visual breakdown:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/Gxi_n-PtQBo" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;br&gt;
&lt;em&gt;This video explains PHP's internal memory allocator, reference counting, and why low-level pointer management makes PHP so fast.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To understand how PHP-FPM manages persistent worker pools, process lifecycle recycling, and request handling behind Nginx, this architecture walkthrough is essential:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/SGTz2kKFZXI" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;br&gt;
&lt;em&gt;Learn how worker processes are spawned, how requests are passed through UNIX sockets, and why worker persistence introduces unique security considerations.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you want a step-by-step demonstration of memory corruption, heap grooming, and how low-level pointer redirection works in modern exploitation:&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/cBD1AgkM1VQ" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;br&gt;
&lt;em&gt;A practical guide to understanding buffer boundaries, return-oriented programming concepts, and memory security.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Official Advisories and Technical Papers
&lt;/h3&gt;

&lt;p&gt;If you need to verify CVE details or review the upstream patches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.php.net/" rel="noopener noreferrer"&gt;PHP.net Official Security Release&lt;/a&gt;&lt;/strong&gt; – Check the official changelog and inspect the Git commit diffs showing the bounds-checking fix inside &lt;code&gt;Zend/zend_hash.c&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog" rel="noopener noreferrer"&gt;CISA Known Exploited Vulnerabilities Catalog&lt;/a&gt;&lt;/strong&gt; – The official U.S. government advisory detailing remediation deadlines for CVE-2026-109618.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.reuters.com/" rel="noopener noreferrer"&gt;Reuters Security Investigation&lt;/a&gt;&lt;/strong&gt; – Raphael Satter's reporting on how AI-assisted vulnerability research uncovered this two-decade-old bug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://labs.watchtowr.com/" rel="noopener noreferrer"&gt;watchTowr Labs Research Disclosure&lt;/a&gt;&lt;/strong&gt; – Deep technical analysis detailing heap grooming layouts and raw multipart packet structures.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Looking Back: Lessons From the Sidelines
&lt;/h2&gt;

&lt;p&gt;Where does all of this leave a developer like me?&lt;/p&gt;

&lt;p&gt;Honestly, on the sidelines for now. I’ve been working with PHP, Laravel, and Drupal in real-time production environments for about seven months. Touching core C runtimes, tuning kernel sockets, and patching production server clusters is senior DevOps territory. Our infrastructure leads are managing the upgrades and regression tests.&lt;/p&gt;

&lt;p&gt;My deployments may be frozen for the next 10 days, but instead of treating it as downtime, I used the pause to understand what is actually happening beneath my PHP code.&lt;/p&gt;

&lt;p&gt;Sometimes the biggest breakthroughs in your career happen when you stop building features for a moment and look down into the engine powering everything.&lt;/p&gt;

&lt;p&gt;Has your team frozen deployments or restarted your PHP-FPM clusters yet? Let's discuss in the comments below.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>devops</category>
      <category>php</category>
    </item>
    <item>
      <title>How I'm Learning Java From Scratch — The 2-Resource Setup That's Actually Working</title>
      <dc:creator>karnVen</dc:creator>
      <pubDate>Wed, 18 Mar 2026 09:44:43 +0000</pubDate>
      <link>https://dev.to/karnven/how-im-learning-java-from-scratch-the-2-resource-setup-thats-actually-working-5eib</link>
      <guid>https://dev.to/karnven/how-im-learning-java-from-scratch-the-2-resource-setup-thats-actually-working-5eib</guid>
      <description>&lt;p&gt;&lt;strong&gt;Let me be honest with you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This semester, Java is one of my subjects. But due to some personal reasons, I missed the beginning of classes — and by the time I was back, the professor had already moved well ahead.&lt;br&gt;
I could've panicked. Asked someone to share notes. Hoped for the best before exams.&lt;br&gt;
Instead, I did what any developer would do — I Googled my way out.&lt;br&gt;
After testing a few resources, I landed on a combination that's genuinely working. No paid courses. No bootcamps. Just two free resources used the right way.&lt;br&gt;
Here's exactly what I'm doing.&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Resource 1 — Abdul Bari's Java Tutorial Series&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you've ever watched a tutorial and felt like the instructor assumes you already know everything — Abdul Bari is the antidote.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;His teaching style is visual, patient, and remarkably clear. He doesn't just explain what something does. He explains why it exists and where it fits in the bigger picture. For someone starting from zero, that context is everything.&lt;br&gt;
I use his series for one thing only: understanding concepts.&lt;br&gt;
Whenever I hit something new — OOP, inheritance, interfaces, collections — I watch his video first. Every single time, before I write a single line of code.&lt;br&gt;
🔗  &lt;a href="https://youtube.com/playlist?list=PLsr8vTgyLdy-WNORNT1AkYpxJBCuk9mAd&amp;amp;si=EJd3vtTF9r5T1e2_" rel="noopener noreferrer"&gt;Abdul Bari's Java Series — YouTube&lt;/a&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%2F1ikz5b22b6xzfxmn5yrq.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%2F1ikz5b22b6xzfxmn5yrq.png" alt="Abdul Bari Java Tutorial Series YouTube Playlist" width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🏫 &lt;strong&gt;Resource 2 — University of Helsinki Java MOOC&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This one is &lt;em&gt;criminally underrated&lt;/em&gt;. I almost never see it recommended, which is wild because it's genuinely one of the best structured Java courses available — and it's completely free.&lt;br&gt;
The &lt;a href="https://java-programming.mooc.fi/" rel="noopener noreferrer"&gt;University of Helsinki's Java Programming MOOC&lt;/a&gt; is a full university-grade course open to everyone. It's split into two parts — &lt;em&gt;Java Programming I and II&lt;/em&gt; — and takes you from basic variables all the way to data structures and algorithms.&lt;br&gt;
But what makes it truly different isn't the content. It's &lt;strong&gt;TMC — Test My Code.&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%2Fylqay6mx9ewlggooyy08.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%2Fylqay6mx9ewlggooyy08.png" alt="University of Helsinki Java Programming MOOC Homepage" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚙️ &lt;strong&gt;Setting Up TMC — This Is the Real Game Changer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TMC is a plugin + CLI tool that plugs directly into your IDE and connects to the MOOC platform. Here's my exact workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the TMC plugin (works with VS Code and IntelliJ)&lt;/li&gt;
&lt;li&gt;Log in and download exercises directly through TMC&lt;/li&gt;
&lt;li&gt;Write your solution locally&lt;/li&gt;
&lt;li&gt;Run tmc test — it runs the actual test suite against your code right there in your terminal&lt;/li&gt;
&lt;li&gt;Run tmc submit — your result gets recorded on the platform&lt;/li&gt;
&lt;/ol&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%2F41pdyxfzpho8w9xkk67w.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%2F41pdyxfzpho8w9xkk67w.png" alt="TMC Test My Code terminal showing test results" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every exercise has real test cases written by university instructors. You don't just think your code works — you prove it. Your scores are saved, your progress is tracked, and every submission builds a completion record.&lt;br&gt;
That accountability completely changed how I study. It stopped feeling like going through tutorials and started feeling like actually shipping code.&lt;/p&gt;

&lt;p&gt;🔁 &lt;strong&gt;How I Use Both Together&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Neither resource alone is enough. Together, they cover everything:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🎯 Need to understand something? → Abdul Bari first.&lt;br&gt;
💻 Need to practice? → Helsinki MOOC exercises.&lt;br&gt;
📊 Need to track progress? → TMC submission history.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bari handles the why, Helsinki handles the do. Together&lt;/em&gt;&lt;/strong&gt;, it's the most effective learning loop I've found.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;📍 Where I Am Now&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Still early in the journey, honestly. But for the first time I'm making real, consistent progress instead of bouncing between resources and feeling like nothing sticks.&lt;br&gt;
The TMC submission system keeps me honest. You can't fake a passing test.&lt;br&gt;
If you're learning Java and feeling scattered or stuck — try this combo. It costs nothing, takes an afternoon to set up, and the structure alone is worth it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'll be documenting this Java journey as I go. If you've used either of these resources — or have suggestions — drop them in the comments. Always happy to learn from others doing the same thing&lt;/em&gt; 👇&lt;/p&gt;

</description>
      <category>java</category>
      <category>beginners</category>
      <category>programming</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
