Record: peeking inside the largest assigned blocks — 2026-09-12

What was asked

Phase 3 asked only the addresses that no operator holds, so a service hiding inside an operator’s own block was never probed. The owner asked for a minimally intrusive way to look inside a few large assigned blocks, and then supplied the search heuristic:

“Humans tend to allocate IP addresses from low to high. So a good hiding spot would be the high end of the block / subnet. For IP address of the form A.B.C.D - limit D to prime values above 128, and scan downwards, and for B.C scan prime values downward.”

The four blocks are the ones chosen on 2026-09-12 and approved by the owner:

Block Size Registry says Why it was chosen
73.0.0.0/8 16,777,216 ARIN allocated, Comcast The deliberately huge control
59.192.0.0/10 4,194,304 APNIC allocated, delegated to “Changsheng Wang” An individual’s name on a four-million-address delegation
43.0.0.0/9 8,388,608 APNIC allocated, Alibaba Singapore A hyperscaler range
151.3.0.0 5,046,272 RIPE assigned, maintainer MNT-IUNET A large non-CIDR legacy blob (77 /16s)

The method, and its order

  1. Paper census first — registry objects, routing, RPKI, reachability. No packet goes to the target.
  2. Third-party corpus second — Shodan’s free InternetDB, which reports what someone else has already seen. No packet goes to the target.
  3. One HTTP question last, to a strictly limited number of addresses, and only then. The question is the same one phase 3 asked: GET /, one connection, no parameters, no authentication.

The tool is sources/ip_block_peek.py, invoked through scripts/08-block-peek.sh and make peek. It writes its work product, reuses an existing one unless --refresh is passed, and records the rule it applied in the output. tests/12-block-peek.sh pins the ordering (highest first, B and C prime, D prime above 128 and descending) and proves the passive and active steps and the reuse rule against fixtures and a local server.

The paper census: two of the four have no route at the top

Block Top address Announced? Covering route RPKI
73.0.0.0/8 (control) 73.251.251.251 yes 73.0.0.0/8, origin AS7922 Comcast ROAs exist for 73.0.0.0/8 and 73.251.0.0/16; a /24 under them would exceed the permitted length
59.192.0.0/10 59.251.251.251 no none in RIPEstat’s view no ROA
43.0.0.0/9 43.127.251.251 no none in RIPEstat’s view no ROA
151.3.0.0 blob 151.79.251.251 yes 151.79.0.0/16, origin AS1267 Wind Tre S.p.A. ROA for 151.79.0.0/16; a /24 under it would be a length violation

Two things are worth stating plainly.

The passive census: 256 candidates, one known

Sixty-four candidates per block, 256 in all, drawn top-down by the owner’s rule, asked of Shodan’s InternetDB.

Exactly one had a record: 151.79.241.149, position 42 of the 151.3 block, with port 443 open and tagged self-signed. Every other address in the sample is unknown to the third party — no ports, no hostnames, no tags. That is the third-party view of the high end of four large blocks, and it is almost entirely empty.

The active pass: 44 questions, and one answer

Pass Addresses Result
The owner’s walk-down, 8 per block, at the very top 32 32 timeouts. Not one answer, on port 80, in any of the four blocks
Bottom controls, one per block 4 4 timeouts
The flagged host and its neighbourhood 8 One refusal (151.79.241.148, port 80, 192 ms) and seven timeouts

Then one TLS handshake and one HTTPS request to the address the corpus had flagged, which is the only live thing this pass found.

The finding: an internet-exposed Zyxel firewall

151.79.241.149 serves, on port 443, the factory self-signed certificate of a Zyxel USG FLEX 100:

Field Value
Subject CN = usg_flex_100_D8ECE571942B
Issuer the same (self-signed)
Validity 2021-08-27 to 2031-08-25 — a ten-year factory certificate
Subject alternative name othername: UPN::usg_flex_100_D8ECE571942B, email:usg_flex_100_D8ECE571942B

Three independent things agree on what it is:

  1. The certificate names the model — USG FLEX 100 — and its own serial string.
  2. D8ECE571942B is a MAC address whose OUI, D8-EC-E5, the local IEEE registry lists as Zyxel Communications Corporation. Zyxel’s factory certificate format is exactly this.
  3. An HTTPS request to the address returns 200 with appliance-style Cache-Control: no-cache, private headers and an HTML login shell.

So the high-end search found an ordinary security exposure: a firewall’s management interface reachable from the open internet, still presenting the certificate it shipped with in 2021. Its neighbours are silent on 443 — .148 refuses port 80 and .150 says nothing — so the appliance is an island of one live host in an otherwise quiet /24, which is the same shape as the project’s strongest phase 4 hint, at a different scale.

No authentication was attempted, and none will be. This is an observation about a third party’s device, not a target. It is worth recording partly because it is what the method is for, and partly as a warning about a device somebody should fix. Whether to tell anyone is an open question for the owner, alongside the Site B abuse-report question.

What this says about the hiding-spot hypothesis

The intrusion ledger

Activity Count Notes
InternetDB lookups (third party) 256 No packet to any target
RIPEstat, RDAP, BGP-state lookups about 25 No packet to any target
HTTP GET / on port 80 44 The approved ceiling was 50; one question per address
TLS handshakes 1 To the flagged host, port 443
HTTPS requests 1 To the flagged host, port 443
Neighbour TCP connects 2 Port 443, to .148 and .150

No scan, no port sweep, no credential, no authentication attempt, and no request with a parameter of any kind. Every request carried the project’s own user agent, which names the project and the way to reach its owner.

What would change this reading

Commits