hacKicker

Collection / 01

The catalogue.

Credited vulnerability reports, assigned CVEs, and upstream fixes. The research record of Warisjeet Singh.

Credited findings.

HackerOne reports

Vulnerability reports by Warisjeet Singh (sin99xx), submitted through HackerOne and credited in NoScript’s changelog. Release notes link each finding to the shipped fix.

Tor Browser / NoScript: content-patch propagation

Incomplete propagation of NoScript’s content patches across DOM changes. Fixed in NoScript 13.6.35 and shipped in Tor Browser 15.0.24.

NoScript changelog ↗ Tor 15.0.24 release ↗ Tor issue #45371 ↗

NoScript: IPv4 policy matching

Incorrect IPv4 address matching in NoScript’s policy engine. Fixed in NoScript 13.6.34.

NoScript changelog ↗

Tor Browser / NoScript: SharedWorker identity mismatch

A shared-worker identity mismatch allowed WebAssembly to run at Tor Browser’s Safer security level. Fixed in NoScript 13.6.33 and shipped in Tor Browser 15.0.23.

NoScript changelog ↗ Tor 15.0.23 release ↗ Tor issue #45296 ↗

Tor Browser / NoScript: missing HTML policy hook

A missing setHTMLUnsafe hook left child contexts outside WebAssembly restrictions at Tor Browser’s Safer security level. Fixed in NoScript 13.6.33 and shipped in Tor Browser 15.0.23.

NoScript changelog ↗ Tor 15.0.23 release ↗ Tor issue #45297 ↗

Assigned CVEs

07 public records

QEMU VGA text: out-of-bounds write

The text and graphics renderers share one geometry cache in different units. Switching modes can leave the resize check comparing equal values, and the glyph loop paints past the surface. Our follow-up patch is merged upstream.

QEMU work item #4215 ↗ patch series ↗ commit 418396be ↗

Exhibit 01The evidence: hw/display/vga.c, verbatim
qemu / hw/display/vga.c · commit 418396bemerged 2026-08-25
@@ -1249,8 +1252,8 @@ static void vga_draw_text(VGACommonState *s, int full_update)
         surface = qemu_console_surface(s->con);
         qemu_console_text_resize(s->con, width, height);
         s->last_depth = 0;
-        s->last_width = width;
-        s->last_height = height;
+        s->last_text_width = width;
+        s->last_text_height = height;
         s->last_ch = cheight;

QEMU device emulation: heap use-after-free

A race between directory reads and rename operations in QEMU's 9pfs device can free path state while it is still in use. An unprivileged guest can trigger the heap use-after-free and crash the host process, causing denial of service.

commit 5a8da7e ↗

Exhibit 02The evidence: hw/9pfs/codir.c, verbatim
qemu / hw/9pfs/codir.c · commit 5a8da7emerged 2026-06-01
@@ -220,13 +220,16 @@ int coroutine_fn v9fs_co_readdir_many(
     int err = 0;
+    V9fsState *s = pdu->s;

     if (v9fs_request_cancelled(pdu)) {
         return -EINTR;
     }
+    v9fs_path_read_lock(s);
     v9fs_co_run_in_worker({
         err = do_readdir_many(pdu, fidp, entries, offset, maxsize, dostat);
     });
+    v9fs_path_unlock(s);
     return err;
 }

Exim: pre-authentication stack leak

Malformed PROXY frames can disclose live stack bytes before SMTP authentication when the sender is trusted by hosts_proxy, exposing an ASLR-defeat primitive.

read the advisory ↗

Exhibit 03The evidence: the advisory, verbatim
exim.org · EXIM-Security-2026-05-19.1coordinated release 2026-05-29
Identifier:   EXIM-Security-2026-05-19.1 (CVE-2026-48840)
Type:         Pre-authentication information disclosure (uninitialised stack)
Severity:     Moderate (CVSS 5.3)
Credit:       Warisjeet Singh (sin99xx)

2026-05-19 12:35 UTC: Initial security report received from Warisjeet Singh (sin99xx).
2026-05-19 13:26 UTC: Exim maintainers acknowledge the report.
2026-05-19 14:06 UTC: Root cause confirmed; fix prepared in private repositories.
2026-05-29 14:00 UTC: Public coordinated release of the fix and advisory.

QEMU usb-ccid: out-of-bounds read

A guest can fill the pending bulk-in ring, partially read a slot, then reuse it with a stale cursor. The unsigned length subtraction wraps and reads past data[].

read the patch ↗

Google Gemini for iOS: conversation disclosure

Sharing a snippet created a public link that carried the entire conversation history, not the excerpt.

nvd record ↗

Exhibit 04The evidence: the NVD record, verbatim
nvd.nist.gov · CVE-2025-5009published 2025
"In Gemini iOS, when a user shared a snippet of a conversation,
it would share the entire conversation via a sharable public link
that contained the entire conversation history and not just
the snippet."

Joomla core: incorrect access control

An improper access check allowed users to display a list of modules in the frontend.

read the advisory ↗

Exhibit 05The evidence: the Joomla advisory, verbatim
developer.joomla.org · CVE-2026-48956published 2026
"An improper access check allows users to display a list
of modules in the frontend."

Fixed upstream.

04 merged changes

Four fixes in Go and Google’s XNNPACK. Every change links to its upstream review.

Go: crypto/tls

Pre-1.3 TLS server handshakes set ConnectionState.LocalCertificate on resumed connections, reporting a certificate chain that was never presented to the peer. The fix moves population to where the Certificate message is actually written.

CL 789862 ↗

Exhibit 06The evidence: the bad assignment, removed
go / crypto/tls · CL 789862merged 2026-06-17
@@ -280,10 +280,6 @@
 		return err
 	}

-	if hs.cert != nil {
-		hs.c.localCertificate = hs.cert.Certificate
-	}

 	if hs.clientHello.scts {

XNNPACK / LiteRT: heap out-of-bounds write

Missing bounds checks in the LiteRT tensor builder let a crafted model drive a heap out-of-bounds write.

PR #10464 ↗

Exhibit 07The evidence: litert/tensor/arithmetic.h, verbatim
xnnpack / litert/tensor/arithmetic.h · PR #10464merged 2026-07-02
@@ -560,6 +560,11 @@ Tensor<Mixins...> ExpandDims(
     if (real_axis < 0) {
       real_axis += input_info.shape.size() + 1;
     }
+    if (real_axis < 0 ||
+        real_axis > static_cast<int>(input_info.shape.size())) {
+      return Tensor<Mixins...>(graph::ErrorTensor(absl::InvalidArgumentError(
+          "The ExpandDims axis is out of range.")));
+    }
     output_info.shape.insert(output_info.shape.begin() + real_axis, 1);

XNNPACK: out-of-bounds read

Out-of-bounds read in the qb4w transposed-weight packer.

PR #10463 ↗

Exhibit 08The evidence: src/reference/packing.cc, verbatim
xnnpack / src/reference/packing.cc · PR #10463merged 2026-07-02
@@ -2393,7 +2397,7 @@ XNN_NO_SANITIZE_FUNCTION void xnn_pack_qb4_weights_and_biases(
         /*nr=*/nr,
         /*kr=*/kr,
         /*sr=*/sr,
-        /*k_stride=*/k_stride,
+        /*k_stride=*/output_channels,
         /*bl=*/block_size,

XNNPACK: heap out-of-bounds write in CONCATENATE

CONCATENATE never checked that inputs matched on non-axis dimensions, so a sibling with a larger trailing product overran the output buffer: attacker-controlled length and content, reachable from an untrusted model through the default float delegate.

PR #10373 ↗

Exhibit 09The evidence: src/subgraph/concatenate.c, verbatim
xnnpack / src/subgraph/concatenate.c · PR #10373merged 2026-06-03
@@ -126,6 +126,37 @@ static enum xnn_status reshape_concatenate_operator(
+  // All inputs must share the same rank and identical dimensions on every axis
+  // except the concatenation axis. Without this check, an input whose post-axis
+  // dimensions differ from input0's would make the per-row copy stride exceed
+  // the output buffer size computed below (which is derived from input0's
+  // shape), producing an out-of-bounds write in the copy micro-kernel.
+  const size_t num_dims = values[input_id[0]].shape.num_dims;

The web side.

Public + private programs

Accepted findings across public and private bug-bounty programs, including the Bugcrowd platform itself. Private programs do not publish patches, so there are no links here by design. Source: sin99xx.com.

Bugcrowd: the platform itself

A valid finding against the bug-bounty platform's own product.

KOHO

#2 on the program leaderboard.

Major private program

#3 on the leaderboard.

1win · DoorDash · Monero · Whoop · Eightfold

Accepted findings across public and private programs.