Innovate, disrupt, code the future. 💻🔐🚀

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

Gate Go 1.27 SIMD experiments before adding intrinsics

A package import can be a more important compatibility boundary than the first vector operation inside it. Go 1.27 ships experimental simd and simd/archsimd packages, but they are not part of an ordinary build. Code that imports either package needs GOEXPERIMENT=simd at build time. If that requirement is left as tribal knowledge, a developer can add an intrinsic locally, CI can build a different program, and a release job can discover the gap only after the source has reached a broader branch.

2026-10-09

Gate a systemd sandbox exposure score before deployment

A service-unit review often ends with a useful but non-enforcing observation: systemd-analyze security reports an exposure score, the reviewer notes it, and the change still moves on. That is reasonable for discovery, but it does not make a sandbox regression visible to a pull request or deployment job. A unit can lose NoNewPrivileges=, regain access to host devices, or widen its filesystem access without a syntax error.

The useful boundary is an exposure budget. This guide uses systemd-analyze security --offline=yes --threshold= to make a candidate unit fail before it is installed or restarted. The check runs against a file in the review workspace; it does not contact the service manager, reload a unit, or start the service. The result is a small CI gate that distinguishes a valid unit file from one that also meets the team’s agreed sandbox target.

2026-09-23