Habr•September 14, 2026•🇷🇺Translated from Russian

Yookassa Webhook Flaw Allowed Forging Payment Confirmations via Single Curl Request

A technical audit of a car rental booking service revealed that the Yookassa webhook endpoint accepted payment.succeeded events at face value, allowing forged payment confirmations with a single unauthenticated curl request.

Original vulnerable implementation

The handler in payment_service.py extracted the event type and gateway_payment_id directly from the incoming JSON payload. It performed only one check: whether the gateway_payment_id existed in the local database. If the event type matched payment.succeeded, the payment status was updated and the booking marked as paid. No signature validation, IP filtering, or secondary verification against the Yookassa API was performed.

Because the gateway_payment_id is returned to the client immediately after payment initiation, any user who created a booking could replay the identifier in a forged webhook and complete the transaction without paying.

Why signature checks were not already in place

Yookassa documentation describes an optional Webhook-Signature header using HMAC-SHA256, yet the integration had never configured a webhook_key. The team rejected IP-based allowlisting because traffic passed through reverse proxies, making reliable extraction of the client IP difficult without weakening the trust model. Instead, the fix relies on an authoritative reverse lookup.

Remediation implemented

The corrected handler now treats the incoming webhook solely as a notification trigger. It immediately calls the Yookassa Payments API using the shop ID and secret key to retrieve the current payment state. Status, amount, and currency are taken exclusively from the API response. Mismatches or API failures result in the webhook returning a 5xx status so that Yookassa will retry later. Final statuses are no longer overwritten by subsequent notifications.

A development mode that lacks API credentials retains the original trusting behavior, as no real payments occur in that environment.

Testing and scope of the patch

  • test_forged_webhook_ignored_when_gateway_says_pending — forged succeeded event ignored when API reports pending
  • test_webhook_amount_mismatch_ignored — status unchanged on amount discrepancy
  • test_webhook_confirmed_success_marks_paid — correct transition when API confirms payment
  • test_webhook_canceled_marks_failed — cancellation properly reflected
  • test_webhook_final_status_not_rewritten — no extra API call for already-final payments
  • test_webhook_unknown_payment_ignored — unknown IDs produce no side effects

The PR added 62 lines to the service and 205 lines of tests. Three further improvements—IP allowlisting, signature verification, and removal of double commits—were intentionally left for separate work to keep the security fix minimal and low-risk.

Related articles

Habr•Vulnerabilities & Exploits

Apple iOS Security Architecture: From Power Button to App Launch in Modern Devices

The article examines the complete boot and trust chain in modern iPhones, starting from the immutable BootROM and progressing through iBoot, the XNU kernel, and the Secure Enclave. It explains how Secure Boot verifies signatures but does not guarantee absence of vulnerabilities, allowing exploits like checkm8 to persist across devices. The piece details data protection classes, BFU versus AFU states, and how passcodes interact with hardware-bound keys to limit brute-force attempts. It further describes application sandboxing, entitlements, code signing, and Pointer Authentication (PAC) as layered defenses that raise the cost of exploitation. The analysis shows why modern jailbreaks require multi-stage chains involving kernel read/write, sandbox escapes, and PAC bypasses rather than single vulnerabilities. Overall, the architecture transforms privilege from a simple scalar into a graph of capabilities across isolated components.

Habr•Vulnerabilities & Exploits

Critical PHP Vulnerabilities CVE-2026-109618 and CVE-2026-109619 Enable Unauthenticated Remote Code Execution

Two critical vulnerabilities in PHP, tracked as CVE-2026-109618 and CVE-2026-109619, both scoring CVSS 9.2, were disclosed on October 21. The flaws allow attackers to execute arbitrary code without authentication by triggering out-of-memory conditions that lead to use-after-free memory corruption. Exploitation involves specially crafted requests that manipulate uninitialized arrays and function pointers, with full chains demonstrated via PHP_SESSION_UPLOAD_PROGRESS and fatal error backtraces. The issues affect PHP versions starting from 5.4 and were discovered using AI tools Gemini 4 Argon and GPT-5.6 Sol, resulting in a patch exceeding 10,000 lines of code. Amazon detected attacks as early as October 17, with Cloudflare later reporting millions of exploitation attempts. Mitigation requires updating to patched versions such as PHP 8.2.35, 8.3.36, 8.4.27 or 8.5.12, while temporary workarounds include disabling session upload progress and fatal error backtraces.

AntiMalware•Vulnerabilities & Exploits

Trend Micro ZDI Reports on Critical Linux KSMBD Vulnerabilities Leak to Public Mailing Lists Before Patches

Trend Micro Zero Day Initiative inadvertently published detailed vulnerability reports for the Linux kernel's KSMBD component into public mailing lists. Two flaws received CVSS scores of 9.0, enabling remote code execution under specific conditions. One issue involves a race condition during parallel SMB request handling, while the second stems from an incorrect buffer size calculation in the SMB Direct mechanism that requires RDMA and a writable share. Technical details including root causes and reproduction steps became publicly archived before fixes reached end users. The KSMBD maintainer has already merged a patch for ZDI-CAN-33774 into their repository, yet distribution kernels may still lack the update. Additional privilege-escalation and information-disclosure risks in other kernel components were also described in the leaked messages.

Hispasec•Vulnerabilities & Exploits

Node.js Issues Security Releases for 26.x, 24.x and 22.x Fixing High-Severity TLS and Brotli Flaws

Node.js published security updates on October 21, 2026 for the 26.x, 24.x and 22.x release lines. The patches address multiple high-severity vulnerabilities affecting TLS hostname validation and the Brotli decoder, along with updates to critical dependencies including OpenSSL and Undici. Several CVEs cover bypasses in certificate hostname checks when IP addresses use full-width digits or when hosts resolve loosely to IP addresses. A particularly serious out-of-bounds write in the Brotli decoder (CVE-2026-111497) could enable remote code execution on services processing compressed responses. Additional fixes resolve keep-alive socket timing issues, DNS resolution truncation with NUL characters, and entropy caching problems in crypto.randomUUID and randomInt functions. The releases also update c-ares, Undici, OpenSSL, SQLite and ca-cert bundles following the eMudhra intermediate CA compromise.