Please report suspected vulnerabilities privately, through GitHub's private vulnerability reporting on this repository, rather than in a public issue. Include what you found, how to reproduce it, and what an attacker would gain. We will confirm receipt and keep you updated on the fix.
Please do not test findings against a cluster you are not authorised to test.
hpc-session automates access to your own account, on clusters whose administrators
are willing for you to do so. It is not a way around a control your site has not agreed
to relax, and it should not be configured against shared, service or third-party
accounts. If a policy blocks legitimate work, ask for it to be changed — see
docs/support-and-feedback.md.
It never handles your SSH key; that stays with ssh and your agent. It only touches a
TOTP seed if you configure a backend that stores one.
- The seed is never stored by the tool itself unless you run
store-seed. Backends are the macOS Keychain,pass, a mode-0600 file, or an external command that prints a code (in which case nothing is stored here). - The seed never appears in
argvor the environment. It is piped into the code generator on stdin, sopscannot see it. - The generated code is written to a
mktempfile (mode 0600) and read exactly once: the askpass helper prints it and deletes it. That single-shot behaviour is deliberate — a helper that kept answering would letsshretry a stale code in a loop. - Profiles are created mode 0600 in a 0700 directory, and
.gitignoreexcludes*.confand*.seedso a profile or a seed cannot be committed by accident. - Nothing is sent anywhere. There is no telemetry and no network access beyond the
sshconnection you asked for.
These are properties of the design, not bugs. They are documented so you can decide.
- A stored seed weakens two-factor authentication. Keeping it on the machine that
also holds your SSH key means one file read yields both factors. Read
docs/2fa-enrollment.md before choosing a storage backend; the
commandbackend and theHS_OTPvariable both avoid storing anything. - Profiles are sourced as shell. A profile can run arbitrary code, by design — that is what makes the VPN hooks work with any client. Treat a profile like a script: do not run one you did not write.
- The control socket is a live, authenticated connection. Anyone who can write to
your
HS_CONTROL_DIRas your user can use it without authenticating. The directory is created 0700; on a shared machine, keep it on local disk, andclosewhen you are done. HS_TOTP_CMDand the VPN hooks are executed. They come from your own profile, but it means an attacker who can edit your profile can run code as you — the same exposure as your shell startup files.
The main branch is the supported version.