OK, so a bit of a baity headline, but we all know the internet is basically a war zone right now.
Peplink, I think you were a bit slow on CVE-2026-98432 given how many devices it affects across the product range. “We are investigating…” with two days of silence for such a large vuln isn’t great. I do appreciate and assume that the engineering team at Peplink was working extremely hard to get all of the necessary builds created and QA’d, but comms to distributors or partners about what’s coming and what the status is will be critical as the internet becomes more of a war zone.
More importantly, we (network/system admins) need a scalable and/or scriptable way to apply firmware updates. It is painful to update custom firmwares across many subsets of devices across organizations. When you’re a partner that manages dozens to hundreds of organizations and pretty much every product across the spectrum, it’s daunting! But hey, I never complain without a recommendation or offer for help ![]()
I think there are two possible solutions that aren’t necessarily mutually exclusive:
-
Special builds should not be used for rapid security releases. Semantic versioning principles state that builds should be [major].[minor].[patch], but Peplink uses the Patch tuple as more of a sub-version, which is cool. However, as you did with ICVA releases for these patches, you can use a fourth tuple to push a “new” version and allow it to be selectable in the dropdown in InControl2
-
Expose an IC2 API endpoint (I couldn’t find one in the docs) to update firmware for orgs, groups, and individual devices. I understand this is not a small effort given exceptions, validations of custom firmware URLs, scheduling, etc., but again, the internet is a warzone. It’s only a matter of time before some vulnerability is discovered that is widely exploited and affects Peplink devices (among everything else), and patching in minutes via API and scripting versus hours of point and click, copy and paste, will actually make a difference.
/me steps down from soap box
Thanks y’all ![]()