Chat on WhatsApp
Upgrades & Patches 9 min read

Magento APSB26-153 (October 2026 Security Patch): What It Fixes and How to Apply It

APSB26-153 is the October 2026 Magento security patch from Adobe: 11 CVEs, five critical, topped by an unauthenticated CVSS 10.0 template engine flaw. Here is who is affected, what the 2.4.9 CE patch changes, and the exact steps I use to apply 249-2026-10-001-CE.patch on Magento Open Source.

Magento APSB26-153 (October 2026 Security Patch): What It Fixes and How to Apply It

Adobe published APSB26-153, the October 2026 Magento security patch, on Tuesday October 13. If you run Magento Open Source or Adobe Commerce on 2.4.4 to 2.4.9, it applies to you, and the top CVE is about as bad as a score gets: 10.0, unauthenticated, network reachable.

I applied it to this site tonight, October 20. It did not go in clean on the first try, which is its own story (I wrote that one up separately). This post is the reference version: what APSB26-153 fixes, who is affected, and the exact steps I use to apply the isolated patch on a 2.4.9 Open Source store.

11CVEs fixed in APSB26-153
10top CVSS score (CVE-2026-103849)
5rated critical by Adobe
22core files changed by the 2.4.9 CE patch

What APSB26-153 is

APSB26-153 is Adobe's fourth monthly bulletin under the isolated patch model that started with APSB26-73 in July. Same deal as before: no 2.4.9-p2, no new Composer release. Adobe ships a zip per release line, you apply the patch file inside it on top of your current code, and Adobe calls the patched state a dated label such as 2.4.9-2026-oct.

The fixed labels in the bulletin are 2.4.9-2026-oct, 2.4.8-2026-oct and 2.4.7-2026-oct for both editions, plus 2.4.6, 2.4.5 and 2.4.4 -2026-oct for Adobe Commerce only. 2.4.10-alpha1, the first alpha of the next line, also carries the fixes. Adobe says it is not aware of any exploits in the wild for these issues as of publication.

Key point: October is not cumulative from 2.4.9 GA. Adobe's release notes for APSB26-153 (KB ka-49323) say you must already have every earlier monthly isolated patch for your line, applied in release order. On 2.4.9 that means July, August and September first.

The 11 CVEs in APSB26-153

Straight from the bulletin. "Auth" means the attacker needs some kind of login first.

CVEWeaknessImpactCVSSAuth
CVE-2026-103849Template engine injection (CWE-1336)Code execution10.0No
CVE-2026-92909Incorrect authorization (B2B)Code execution9.8No
CVE-2026-91013Stored XSSPrivilege escalation9.3No
CVE-2026-100133Stored XSSPrivilege escalation9.3No
CVE-2026-92464Improper input validationCode execution9.1Yes (admin)
CVE-2026-92911Stored XSSCode execution8.7Yes
CVE-2026-95631Improper input validationFile system write8.7Yes (admin)
CVE-2026-92908Incorrect authorization (B2B)Security feature bypass8.3Yes
CVE-2026-92922Stored XSSPrivilege escalation8.1Yes (admin)
CVE-2026-92910Incorrect authorization (B2B)Security feature bypass7.2No
CVE-2026-95630Improper input validationSecurity feature bypass4.3Yes

Three of the eleven (92909, 92908, 92910) are B2B only. If you run plain Open Source, eight apply to you, and the 10.0 is one of them. Its vector is AV:N/AC:L/PR:N/UI:N/S:C: over the network, low complexity, no privileges, no clicks, and the damage can cross out of the vulnerable component. That is the profile that gets mass-scanned within weeks of a public diff.

Adobe does not publish which file fixes which CVE, and I am not going to guess. What I can tell you is what the 2.4.9 CE patch touches, because I read all 1,224 lines of it before applying it:

  • Email and CMS template processing: Framework/Filter/Template.php, two new classes (DeferredDirectiveRegistry, SignatureProvider), the email template Filter and Validator, and the admin template Preview block, which now validates raw template text before rendering it. Given the CWE-1336 headline, this is the area I would watch.
  • UI component sanitizer: the ${ } template check in Sanitizer.php is replaced with a stricter syntax check.
  • Customer data over APIs: a new RestrictedFieldsPlugin on the customer repository, wired in for REST, SOAP and GraphQL, plus a change in how a customer is loaded by forgot-password token.
  • Admin mass attribute update: the Product/Action/Attribute/Save controller sanitizes attribute values differently.
  • Smaller changes in Escaper, the email address validator, the WYSIWYG HTML validator, the file lock backend and the persistent cart plugin.

Who is affected, and which zip you need

Your lineMust be on exactlyOctober zipNotes
2.4.92.4.9 + Jul, Aug, Sep patches2-4-9-oct-2026.zipOpen Source and Commerce
2.4.82.4.8-p5 + earlier monthly patches2-4-8-p5-oct-2026.zipSee KB ka-50927 if patch-status shows UNKNOWN
2.4.72.4.7-p10 + earlier monthly patches2-4-7-p10-oct-2026.zipOpen Source and Commerce
2.4.6, 2.4.5, 2.4.4-p15, -p17, -p182-4-6-p15-oct-2026.zip and so onCommerce only, Composer keys needed to download

Open Source 2.4.6 is listed as affected but gets no October fix, because Open Source downloads stop at 2.4.7. Its support ended on August 11, which I covered in the 2.4.6 end of life post. If you are still there, the answer is an upgrade, not a patch.

On Adobe Commerce Cloud, do not apply the isolated file by hand. Adobe says the latest cloud-patches update already covers it, and applying the isolated patch on top of that can break installation.

Before you apply: three checks

These take two minutes and save an evening.

cd /var/www/html

# 1. exact base version
composer show magento/product-community-edition | grep ^versions
# versions : * 2.4.9

# 2. is Adobe's patch-status tool there at all?
php vendor/bin/patch-status --version
# patch-status 1.0.2

# 3. any leftovers from older patch runs or hand edits?
find vendor -name '*.rej' -o -name '*.orig' | head

If step 2 says the file does not exist, you are missing the July patch, because July is what installs vendor/bin/patch-status. Stop there and catch up first. I wrote a full checklist for finding missing Magento security patches for exactly this case.

Also confirm the September emergency hotfix is in. APSB26-146 (CVE-2026-75650, the zero-day behind the StyleSmuggler attacks) ships as VULN-39341 and is not part of the October zip. Adobe's October notes tell you to apply it separately.

How to apply APSB26-153 on Magento 2.4.9 Open Source

Download and unpack the zip outside the docroot:

mkdir -p ~/patches/2026-10 && cd ~/patches/2026-10
curl -fsSLO https://repo.magento.com/patch/2-4-9-oct-2026.zip
unzip 2-4-9-oct-2026.zip

The 2.4.9 zip holds three patch files: 249-2026-10-001-CE.patch, an EE patch and a B2B patch. Open Source stores apply the CE file and nothing else. Commerce applies CE, then EE, then B2B if installed, in that order.

Dry run first, against the real codebase, on staging:

cd /var/www/html
patch -p1 --dry-run < ~/patches/2026-10/249-2026-10-001-CE.patch

Every line should read checking file ... with no FAILED. A clean dry run means your files match what Adobe built against. If anything fails, do not force it. Two failed hunks on Sanitizer.php and Preview.php is exactly what I hit tonight, and the fix for an isolated patch that will not apply is in its own post.

Then apply for real:

bin/magento maintenance:enable
patch -p1 --no-backup-if-mismatch < ~/patches/2026-10/249-2026-10-001-CE.patch
bin/magento setup:di:compile
bin/magento cache:flush
bin/magento maintenance:disable

Why setup:di:compile when most guides skip it: the October CE patch changes constructors and adds plugins in several di.xml files. In production mode the compiled DI config and generated interceptors must be rebuilt or the new plugin never runs. October does not touch JS or LESS, so no static content deploy is needed for it alone. (August patches a JavaScript library under lib/web, so if you are catching up, run the static deploy too.)

--no-backup-if-mismatch stops GNU patch from dropping .orig files into vendor when a hunk lands with fuzz. Those leftovers confuse every later check.

Make it survive the next composer install

A patch applied by hand vanishes the next time CI runs composer install. I keep the patch files in the repo under patches/ and reapply them from a Composer hook:

"scripts": {
    "post-install-cmd": ["sh patches/apply-hotfixes.sh"],
    "post-update-cmd": ["sh patches/apply-hotfixes.sh"]
}

Adobe's patches touch many packages and even root files like nginx.conf.sample, so they do not fit the one-package-per-patch model of cweagans/composer-patches. A small shell hook is simpler. It must be idempotent once patches stack, which is harder than it sounds; the not-applying post has the version I run.

Verify the patch landed

bin/magento --version still says 2.4.9 after this, and it always will. Use Adobe's tool instead:

php vendor/bin/patch-status

This is trimmed output from this store after tonight's work:

{
    "base_version": "2.4.9",
    "applied_patches": [
        "249-2026-07-001-CE",
        "249-2026-08-001-CE",
        "249-2026-09-001-CE",
        "249-2026-10-001-CE",
        "249-VULN-39341-CE"
    ],
    "missing_patches": [],
    "vulnerability_status": {
        "CVE-2026-103849": { "status": "PROTECTED" },
        "CVE-2026-91013": { "status": "PROTECTED" },
        "CVE-2026-100133": { "status": "PROTECTED" },
        ...
    }
}

Then test the areas the patch touched, not just the homepage: admin email template preview, a customer account save, forgot password, a mass attribute update in the product grid, and a guest checkout. If something breaks, reverse with patch -R -p1 on the same file and follow my patch rollback recipe, but treat that as a short stop, not a place to stay.

Bottom line

APSB26-153 carries an unauthenticated 10.0 and eight CVEs that hit a plain Open Source store. On 2.4.9, confirm July, August, September and VULN-39341 are in, apply only 249-2026-10-001-CE.patch, recompile DI, and check patch-status for an empty missing_patches. Do it this week, not next sprint.

Behind on the 2026 monthly patches? I apply Magento security patches on production stores with a staging dry run, a written rollback plan and a patch-status report at the end. From $499 audit · $2,499 sprint · ~2h @ $25/hr for a single patch window. If you are a full release behind, my Magento upgrade service covers the catch-up.

Get APSB26-153 applied

Frequently asked questions

Is there a Composer package for APSB26-153, like 2.4.9-p2?

No. Adobe ships October 2026 as isolated patch files only. The patched state is labelled 2.4.9-2026-oct, but there is no package by that name to require. You apply 249-2026-10-001-CE.patch from 2-4-9-oct-2026.zip on top of 2.4.9.

I run Magento Open Source. Which file in the zip do I apply?

Only the CE file, 249-2026-10-001-CE.patch. The EE and B2B files are for Adobe Commerce and the B2B extension. Applying them to Open Source fails because the files they patch do not exist.

I skipped July and August. Can I apply only October?

No. October's hunks are built against code that already has the earlier months applied, so on a store without them some hunks fail. Apply July, then August, then September, then October, in that order.

Does APSB26-153 include the VULN-39341 hotfix?

No. VULN-39341 fixes CVE-2026-75650 from the emergency bulletin APSB26-146 in September, and Adobe's October notes say to apply it separately. patch-status lists it as 249-VULN-39341-CE when it is in.

Is CVE-2026-103849 being exploited?

Adobe said it was not aware of exploits in the wild when it published on October 13, 2026. With a 10.0 score and no login needed, I would not wait for that to change. Public patches get diffed quickly.