Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
opnsense-tunables-loader — OPNsense 26.7.6 - High - Remote - Config line injection - tunables loader | Kitploit
Tools/GitHubGitHub/abraxas/opnsense-tunables-loader
Vulnerability AnalysisExploitationWeb Application ExploitationConfiguration AuditingSecurity VirtualizationPenetration TestingLabs & Practice
GitHubabraxas/opnsense-tunables-loader

opnsense-tunables-loader

OPNsense 26.7.6 - High - Remote - Config line injection - tunables loader

View Repository
12 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Abraxas Labs - opnsense-tunables-loader

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  opnsense-tunables-loader

opnsense-tunables-loader

Class: Config line injection Reach: Remote

OPNsense core 26.7.6 (a842fe48) - opnsense.org

System: Advanced: Tunables still interpolates name/value into /boot/loader.conf. Leftover sibling of GHSA-fq94. Tunables.xml tunable / value are bare TextField (newlines on). system_login_configure() writes {$param}="{$value}". Tunables reconfigure also restarts login. Live sysctl(8) goes through shell_safe plus an OID filter, so that hop is not shell injection. The leftover is extra loader directives on the next boot. Privilege is page-system-advanced-sysctl, not page-all.

This GitHub pack stays private until coordinated disclosure.

IDno CVE yet
ClassConfig line injection
ReachRemote (authenticated WebGUI / API)
CWECWE-93
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
ProductOPNsense core
Affected26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) System: Advanced: Tunables
AuthWebGUI session or API key with page-system-advanced-sysctl
LicenseGNU Affero GPL v3.0
Labcompose exec gadget (hunt slot 18850)

I pinned tag 26.7.6 peel a842fe48. The lab is a PHP gadget of the pinned system_login_configure() interpolation. Compose project opnsense-tunables-loader. Hunt slot 18850 in the 18800-18860 gadget family; this compose file uses docker compose exec php, not a published HTTP bind.

What an attacker can do

MethodSinkPrivilege
Tunables value CR/LF (hw.usb.no_boot_wait plus "\n# witness)pin system_login_configure() extra line in /boot/loader.confIntegrity (lab-proven): extra # OPNSENSE-TUNABLES-LOADER-WITNESS on its own line after a closed assignment. Lab: newline-extra-line=yes.
Clean value 1same writerNegative (lab-proven): single assignment line, no witness. Lab: clean-value-single-line=yes.
Same extra loader lines on next bootloader init_path / module_path / *_load / vfs.root.mountfrom / consoleIntegrity (inferred): next-boot loader honors attacker keys. Not rebooted in this gadget.
Garbage loader lines / wrong vfs.root.mountfrom/boot/loader.confAvailability (inferred): boot fail or wrong root.
POST /api/core/tunables/searchItemtunables APIRecon (inferred): list tunables, including current/default/type. Intended for this ACL.
Live sysctl -w of a valid OIDset_sysctl + OID filterIntended page job. Extra loader lines are the leftover.

Lab-proven vs inferred: newline extra loader line and clean-value single-line are lab SUCCESS. Next-boot loader apply is inferred. Gadget, not a full OPNsense FreeBSD VM.

Requires: signed-in user or that user's Local API key with page-system-advanced-sysctl and without page-all. POST /api/core/tunables/*. CSRF on session POST. Reconfigure restarts login; rc.reload_all and boot also call system_login_configure.

Adjacent surface that stays closed

SurfaceLab
Live sysctl shell injectionshell_safe plus OID filter
Clean valuesingle assignment line
Unauth401
User without page-system-advanced-sysctl403
user-config-readonlysave() throws
page-all tunables admin setting a real OIDintended
GHSA-fq94 patched GUI text fieldsdifferent sinks; this field was not named

No unauth. No live sysctl shell. No Diagnostics: Command.

Lab

cd lab
./run.sh

Compose project opnsense-tunables-loader. Witness OPNSENSE-TUNABLES-LOADER-WITNESS. Last line:

SUCCESS opnsense-tunables-loader newline-extra-line=yes clean-value-single-line=yes OPNSENSE-TUNABLES-LOADER-WITNESS

Root launcher: python3 opnsense-tunables-loader-Abraxas-Labs.py.

The fix

Strip CR/LF and " from tunables name and value, same class as GHSA-fq94. Type the name as an OID mask, not a bare TextField. Quote with a helper that cannot close the assignment. Do not write a tunable into /boot/loader.conf unless it is a known loader key.

References

  • github.com/opnsense/core a842fe48c21288d11a422cb944678e8eb308becf
  • system.inc system_login_configure loader.conf interpolation
  • Tunables.xml bare TextField name/value
  • Sibling (other GUI text fields, not this sink): GHSA-fq94
  • CWE-93
Download Tool