Skip to content
Oznog

5.8 · power and environment · after redaction

Telnet on purpose, and the credential leak that proved the split mattered

date
20260824 (decision), 20260907 (the leak it then prevented from being worse)
what happened
Node0's nine transfer switches and four PDUs offer only telnet in practice, their SSH being either 2007-era or host-key-only and refused by modern clients. Christoph decided on 20260824 to keep telnet and treat the isolated management VLAN and per-device access control as the real boundary. When SNMPv3 went out fleet-wide on 20260907, the same credential set was initially used for the SSH-reachable UPS cards and the telnet-only devices, putting the UPS credential on the wire in clear text.
what it cost
One credential rotation, done as soon as the exposure was found.
what changed
Two credential classes were established and are never shared: one for SSH-reachable devices, one for telnet-only devices, kept under distinct names in the encrypted secrets file.
the check now
A secrets layout that makes the two classes visually distinct, plus the standing rule that a credential is never reused across a device whose transport is cleartext.

The decision to keep telnet was explicit and, on its own terms, sound. These cards’ SSH offering was not meaningfully better than cleartext: old ciphers, or a host key type modern clients refuse outright, on firmware that will never be updated again. The PDUs on the same segment have no SSH option at all. The real boundary was an isolated management network plus per-device access control, not the wire protocol. That reasoning still holds.

What it did not anticipate showed up a fortnight later. Rolling SNMPv3 out across the power hardware, it was convenient to use one credential set for everything that draws power in the rack. The UPS network cards speak SSH. The transfer switches and PDUs speak telnet. Using the same SNMPv3 secret on both meant that every time it was configured or verified on a telnet device, a credential built for a protected transport travelled the wire in clear text.

The insight worth keeping is a property statement: “acceptable to send in clear” belongs to the credential, not to the device you happen to be using it on today. A secret’s protection level has to match its weakest intended transport, and the moment one secret spans two transports, the weaker one sets the level for both.

The fix is cheap if you do it before the rollout rather than after. Define credential classes by transport, give them names that make the class obvious at a glance in your secrets store, and never let a member of one class cross into the other’s territory. Node0 rotated the exposed secret the day the overlap was found, which is the only other part of this that has to happen quickly.

Source: node0 lessons v0.1, lesson 5.8. Sanitized: checklist v0.1, 20260921; secrets paths, addresses; voice pass 20260921. Part of oznog.com/node0.