Innovate, disrupt, code the future. 💻🔐🚀

Node 24.22.0 accepts 127.1 against a DNS name that 22.23.3 already rejects

Node 24.22.0 accepts 127.1 against a DNS name that 22.23.3 already rejects

127.1 is a spelling glibc resolves to 127.0.0.1. It is not the text 127.0.0.1. On Node.js 24.22.0, a local TLS server whose certificate had only DNS:127.0.0.1 completed the handshake when the client used that short spelling. The same certificate, the same spelling, and the same loopback listener were rejected by Node.js 22.23.3. That error called 127.1 an IP address that was not in the certificate. Node.js 24.22.1 and 22.23.4 rejected it too, with a third message: the host is a non-canonical IP address.

2026-10-25

containerd 2.4.1 turns example.com/../other into the registry other

containerd 2.4.1 turns example.com/../other into the registry other

example.com/../other/image:latest does not name example.com once containerd’s own reference parser has finished with it. On the v2.4.1 module, Parse returned a locator of other/image and a hostname of other. The same call on v2.4.2 returned invalid reference and no locator. Both results came from the tagged module, not from a reimplementation of the function, and neither call opened a registry connection.

That split is easy to miss if the only check is a CRI pull error. containerd’s CRI PullImage parses the name with distribution.ParseDockerRef before it asks the transfer service or client.Pull to fetch anything. github.com/distribution/reference v0.6.0, the version required by containerd v2.4.1, already rejects a .. path component. A pod that fails there never reaches the parser that rewrites the host. ctr, the transfer service, and client.Pull do not take that detour. The docker resolver builds its registry host from reference.Parse in resolveDockerBase. On an unfixed module, the host it builds is the host left after path.Join, not the host that was written in the reference.

2026-10-25

OpenSSH 10.6 refuses a command-line username that a config file still accepts

OpenSSH 10.6 refuses a command-line username that a config file still accepts

OpenSSH 10.6p1 refused lab$user@<closed-host> before it opened a socket. The process exited 255 and printed remote username contains invalid characters. The same destination, given to portable OpenSSH 10.5p1 and to the already installed OpenSSH_10.0p2 Debian-7+deb13u4 client, did not produce that message. Both clients continued far enough to report that the closed port had refused the connection.

That split is easy to miss if a wrapper only records a non-zero exit. A down host, a bad port, and a username the new client will not accept all end as exit 255. The text on standard error is the part that says which of those happened. The other easy miss is the opposite one. The 6 October 2026 release notes say a User directive in a configuration file is not subject to the new restriction. A command that sets the same name with -o User= is still refused. Those are not two spellings of one input path.

2026-10-24

Check which eMudhra path a trust store still accepts

Check which eMudhra path a trust store still accepts

A subject search of the active Debian trust bundle still printed three emSign roots after the October security update. The same bundle rejected every published eMudhra intermediate. Those two facts are easy to collapse into one, and they are not the same fact.

The check below used Debian 13, ca-certificates 20250419+deb13u1, OpenSSL 3.5.7, curl 8.14.1, Python 3.13.5, and Node.js 22.23.4. curl to https://example.com/ returned HTTP 200. The same curl failed against the public eMudhra test hosts with ssl_verify_result 20, unable to get local issuer certificate. Node.js 22.23.4, including when started with --use-openssl-ca, failed those hosts with CERT_REVOKED instead. A successful connection to a known site and a failed connection to the test hosts is the result this review is looking for. A grep hit on the string emSign is not.

2026-10-24

Read nginx's October fixes against the binary and the dumped configuration

Read nginx’s October fixes against the binary and the dumped configuration

nginx 1.31.6 prints a newer version than nginx 1.30.6. A comparison that asks only whether the version is at least 1.30.6 therefore accepts it. The official nginx.org packages tested for this article do not support that conclusion. nginx -v on the 1.31.6 package printed nginx version: nginx/1.31.6, and the same check on the 1.30.6 package printed nginx version: nginx/1.30.6. The 14 October 2026 fixes are in 1.30.6 and in 1.31.7, not in the mainline releases before 1.31.7. The review below reads the version the binary prints, applies the branch boundary nginx published, and then reads the configuration dump so an included file is not mistaken for an absent condition.

2026-10-23

Gate Python 3.14.8 before a deployment accepts its runtime

A dependency scan can be clean while the interpreter that starts the service is older than the release the incident response plan requires. That gap is easy to create. A container tag, a virtual environment, and a CI runner can each select Python differently, while a deployment job reports only that the application tests passed. By the time someone asks which runtime actually reached production, the release may be several commits away.

2026-10-23

Ship a prototype to go.2bit.pro from a Hermes skill

A prototype does not need a new virtual machine, a new TLS certificate, or a hand-edited reverse-proxy file. On this host, a web app gets a name under go.2bit.pro, a container that listens on port 8080, and a loopback port that only Nginx can reach. The public page at http://go.2bit.pro/ is the guide for that platform. www.go.2bit.pro serves the same page. HTTPS on that name was not accepting connections when this was checked, so the working URL is HTTP.

2026-10-22

Hold agents to a written project contract

A coding agent on a large project will usually produce something that compiles. The damage shows up a few sessions later. A helper gets a new name because the new name sounded clearer. A function that already had callers is rewritten “while we are here.” A comment block explains what the model was thinking, which prompt it was answering, or why an earlier attempt was discarded. The next session then repairs the names, breaks a caller, and you spend the evening restoring behavior that had already been fixed.

2026-10-22

Classify an Ivanti Connect Secure inventory before emergency recovery

An emergency advisory creates pressure to ask the wrong first question. It is easy to start with “which appliance should be upgraded?” before establishing which appliances are actually in scope, which release each one runs, and which version strings cannot safely be interpreted by an unattended check.

CISA added CVE-2026-104935, an Ivanti Connect Secure authentication-bypass vulnerability, to its Known Exploited Vulnerabilities catalog on 13 October 2026. CISA says the issue is being exploited and directs affected organizations to Ivanti’s update and recovery guidance. Ivanti lists affected release lines and resolved releases, but the advisory is not a substitute for an asset inventory, a change record, or a compromise assessment. In particular, CISA notes that the Integrity Checker Tool may not find evidence of this issue because the actor commands execute in memory.

2026-10-13

Gate OpenTofu formatting before an initialized validation job

A configuration review can be technically correct and still be difficult to verify because a one-line expression has been compressed into a shape that hides its arguments, references, or closing braces. It is tempting to make tofu validate the first automated check, but validation has a different dependency boundary: OpenTofu requires an initialized working directory with its referenced providers and modules available. Formatting does not.

The useful first gate is tofu fmt -check -diff. It reads local configuration, reports canonical-format drift, shows the change it would make, and does not rewrite the files. That makes it suitable for a pull-request or pre-commit step before a job initializes a backend, downloads providers, or obtains cloud credentials.

2026-10-12