CLI tool
opaxial/CVE-2026-9830 avatar
opaxial/CVE-2026-9830

CVE-2026-9830 PoC: a Python check for exposed BookingPress Pro booking data

CVE-2026-9830 Proof of Concept

461 stars3 forksPythonApache-2.0

At a glance

What is it?
opaxial/CVE-2026-9830 is a single-script Python proof of concept that normalizes a WordPress URL, queries the BookingPress Pro REST API, and can dump the JSON response to disk. It is a verification tool with a narrow job, and the README spends more words on authorized use and data handling than on the code.
Who is it for?
Adopt it if you are an authorized assessor who needs a quick, readable check that a BookingPress Pro REST route still returns booking or customer records without authentication, and you already have a written scope covering the target.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 28 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 16, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

What CVE-2026-9830 is, and why a PoC script exists for it

The repository describes itself as a Python proof of concept for validating a reported unauthenticated BookingPress Pro REST API exposure. That is the whole problem statement. BookingPress Pro is a WordPress booking plugin, and the reported issue is that some REST route tied to bookings answers requests without authentication. If that route returns records, the response can contain booking and customer information, which the README classifies as personal data.

The tool is for a narrow audience: the authorized assessor who has to confirm the finding on a specific site, not the person who wants to sweep the internet. The README opens with an authorization section before it explains anything technical, and that ordering is deliberate. It asks you to use the project only against systems you own or are explicitly authorized to assess, and it tells you to treat retrieved booking data as sensitive personal information. If your job is to produce evidence that a fix landed, this script is aimed at you. If your job is to inventory your own estate, it is not a scanner and does not pretend to be one.

How the script works: URL normalization, one endpoint, optional JSON output

The mechanism is small enough to describe in a paragraph. The script normalizes a supplied WordPress target URL, then checks the BookingPress Pro REST API endpoint for an exposed booking response. When invoked by an authorized assessor it can save a returned response locally. That is the data flow: argument in, normalized base URL, HTTP request out, response either printed or written to a JSON file.

Configuration is deliberately shallow. The README lists support for timeout, proxy, user-agent, booking ID, and date filtering. Those five knobs tell you what kind of request this is. A proxy option exists because assessors often need to route traffic through a controlled egress point. The user-agent option exists because a default Python user agent is easy to spot in logs. The booking ID and date filters exist so you can narrow a response instead of pulling everything the endpoint will hand over, which matters when the payload is other people's personal data.

The repository has three top-level entries: LICENSE, README.md, and main.py. There is no package structure, no test directory, and no configuration file. Everything lives in one script, which is a reasonable shape for a PoC and a bad shape for anything you intend to run on a schedule.

Installing the CVE-2026-9830 PoC and running a first authorized check

The README gives the install steps directly. Python 3.8 or later is required, and the only third-party dependency is requests. The instructions use a virtual environment, which is the right call for a security tool you may want to delete afterwards.

bash
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install requests

After activation, the environment holds requests and nothing else. The README does not pin a version.

Before you touch a target, read the help output. The README says to review available options locally with this command, and it is the only documented way to learn the flags, because the README itself never lists them.

bash
python3 main.py --help

The output is where you find the exact spelling of the timeout, proxy, user-agent, booking ID, and date filter arguments. Do not guess them from the prose summary; the README does not reproduce them, and inventing a flag is how you end up sending a malformed request to a client's production site.

For an authorized validation, the README says to provide the target through the command-line interface and to start with the non-invasive check mode. It also says to avoid collecting or retaining data beyond the approved assessment scope. Practically, that means your first run against a scoped host should be the check, not the dump. If the endpoint answers, you have your finding. If it does not, you have your verification that remediation worked, which is the second use the README describes under its verification heading.

Output files are the real risk surface

The script can write API responses to JSON files, and the README is blunt about what those files may contain: customer names, email addresses, telephone numbers, booking dates, and service details. That is a data protection problem created by a tool that is otherwise about twenty lines of request logic.

The README's handling rules are specific. Store outputs only in approved encrypted locations. Limit access to authorized assessment staff. Redact personal data from tickets, reports, and demonstrations. Delete assessment artifacts according to the engagement's retention policy.

Notice what the script does not do. There is no built-in redaction, no encryption, no automatic expiry, and no warning before writing a file. The README does not document a dry-run mode that prints without saving, and it does not describe a redaction flag. If your engagement requires that personal data never lands on disk unredacted, you are relying on your own process and on reading main.py to see exactly when the write happens. The README also does not document rollback or cleanup of files already written. For a tool whose output is the sensitive part, that gap is worth weighing before you run it on a real client's site.

Where this PoC is the wrong tool

Three cases stand out. First, broad assessment. The script takes a supplied target and checks one endpoint. There is no host list input, no concurrency, no scheduling, and no reporting format beyond the JSON it saves. If you need to know which of two hundred WordPress installs run a vulnerable BookingPress Pro, this is not the instrument.

Second, authenticated testing. The reported issue is an unauthenticated exposure, so the script is built around requests that carry no credentials. It will not tell you whether an authenticated low-privilege user can reach booking data they should not see, and the README makes no claim that it does.

Third, unattended operation. Nothing in the repository suggests rate limiting, retry backoff, or a guard against accidentally pointing at a live production host. The README's answer to that risk is a written authorization requirement, which is a policy control, not a technical one. If your workflow depends on the tool enforcing scope, it will not.

There is also a currency problem inherent to any CVE PoC. The README's remediation guidance is to upgrade BookingPress Pro and WordPress to supported versions with all vendor security fixes applied. The script checks for exposure, not for a version string, so it cannot tell you whether a site is patched in general. It tells you whether this specific route still answers.

Alternatives, and how they differ in approach

The obvious alternative is a general web vulnerability scanner such as Nuclei. The difference is in the model. Nuclei runs from a template file that describes a request and a matcher, so the CVE check becomes one template among thousands and you get host lists, concurrency, and structured output for free. This repository takes the opposite approach: the check is a standalone Python script with no template engine, no host list, and no ecosystem to keep in sync. If you already run Nuclei, reimplementing this check as a template gives you the operational plumbing you would otherwise build yourself. If you do not, a single script with one dependency is less to install.

A second alternative is manual verification with curl. That is genuinely competitive here, because the underlying action is one HTTP request to one route. The script adds URL normalization, a proxy option, a user-agent option, and JSON file output. If you already have a proxy-configured shell and a habit of saving responses, curl covers most of it. The script's advantage is that it encodes the normalization step, so you do not have to reason about trailing slashes and scheme prefixes each time.

A third option is vendor tooling from the plugin's own ecosystem. The README points administrators at upgrading BookingPress Pro and WordPress, which is a remediation path rather than a testing one. None of these alternatives is strictly better; they sit at different points on the spectrum between a one-off check and a scanning program.

Licence, maintenance, and what upgrading costs you

The repository is licensed under Apache-2.0, which permits commercial and private use, modification, and redistribution provided you keep the licence and notices intact. It also includes an explicit patent grant. That is a permissive licence, and for a security script you may want to fork into an internal pipeline, it removes most of the friction. It does not remove the README's authorization requirement, which is a condition the maintainer states in prose rather than in the licence text. Nothing here is legal advice; if you redistribute the script inside a product, read the LICENSE file rather than this paragraph.

On maintenance, the last push to the default branch was on 2026-08-20, and the repository is not archived. There are no retrieved releases, so there is no versioned artifact to pin and no changelog to read. Upgrading therefore means pulling the current main.py, and the practical cost of that is re-reading the script, because there is no release note to tell you what changed between the copy you have and the copy you would get. For a PoC of a single CVE that is a small burden. It does mean you should treat your local copy as a fork you are responsible for, not as a dependency with a stable interface. The README does not document a versioning scheme or a compatibility policy.

Editorial conclusion

Adopt it if you are an authorized assessor who needs a quick, readable check that a BookingPress Pro REST route still returns booking or customer records without authentication, and you already have a written scope covering the target. Do not adopt it if you want a scanner, an authenticated test suite, or anything that runs unattended against hosts you do not control; the README states the authorization requirement explicitly and the script has no safety rails beyond its own options. Verify first that your Python is 3.8 or later, that requests installs cleanly in a virtual environment, and that you have read main.py end to end before pointing it at a host, because the README documents the flags only through the script's own --help output.

Frequently asked questions

What does the CVE-2026-9830 PoC actually do?

It normalizes a supplied WordPress target URL, checks the BookingPress Pro REST API endpoint for an exposed booking response, and can save a returned response locally when invoked by an authorized assessor. It supports timeout, proxy, user-agent, booking ID, and date filtering configuration.

How do I install and run the CVE-2026-9830 PoC?

You need Python 3.8 or later and the requests package, installed in a virtual environment. Then run python3 main.py --help to review the available options before providing a target through the command-line interface.

Is it legal to run the CVE-2026-9830 PoC against any site?

The README states you should use the project only against systems you own or are explicitly authorized to assess, and not against public, third-party, or production systems without written permission. It also says to handle any retrieved booking data as sensitive personal information.

What should BookingPress administrators do about CVE-2026-9830?

The README's remediation guidance is to upgrade BookingPress Pro and WordPress to supported versions with all vendor security fixes applied, and to confirm that booking-related REST routes enforce authentication and capability checks before returning customer data. It also suggests restricting administrative and API access using least privilege and reviewing logs for unusual requests to BookingPress REST endpoints.

What data can the CVE-2026-9830 PoC write to disk?

The tool can write API responses to JSON files, and the README says those files may contain customer names, email addresses, telephone numbers, booking dates, and service details. It advises storing outputs only in approved encrypted locations and deleting assessment artifacts according to the engagement's retention policy.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. opaxial/CVE-2026-9830 on GitHub
  4. README
Community notes

Community notes