456 points josemrb 1 hour ago 107 comments
rvz 1 hour ago | parent
illusive4080 1 hour ago | parent
hypfer 1 hour ago | parent
As in: "Actually out there"
The hypothetical Alpine exists, yes, but what runs that like that?
jbyers 1 hour ago | parent
Edit: Sure, a small minority presumably run sshd under these conditions. But a small minority times the number of Alpine containers running in the world gets to a large absolute number.
Edit 2: You really don't need to look very hard to find public container examples at million-download scale.
hypfer 1 hour ago | parent
ekidd 1 hour ago | parent
I'm guessing in practice relatively few people are actually exposed. But if they are, it's catastrophic.
stingraycharles 1 hour ago | parent
Bender 1 hour ago | parent
Possibly public SFTP servers. I have allowed null passwords in the past for anonymous public SFTP and I run Alpine Linux exclusively for my servers both VM's and physical. The shadow package (PAM) did not get installed by default. I installed it but I had to specify it in the installation so there are likely people without it. There is probably a way to find them on shodan.io.
I will activate one for people to play around with:
sftp hn@ping.altchan.org
There's no firewall and no password. Hack away HN. PasswordAuthentication yes
PermitEmptyPasswords yesfigassis 52 minutes ago | parent
gosen 1 hour ago | parent
"tl;dr" was a bit of a downgrade though, but that's fine
it's a nice way to promote the company behind it
neuroticnews25 1 hour ago | parent
jonstewart 1 hour ago | parent
tasuki 55 minutes ago | parent
[0]: Be they human or LLM. Or an entity with any proportion of the two. I do not judge nor discriminate.
oneeyedpigeon 17 minutes ago | parent
phyzome 11 minutes ago | parent
xnorswap 3 minutes ago | parent
cube00 1 hour ago | parent
> so musl (the libc under alpine) goes ok fine, crypt() just won't return NULL anymore. if it fails, it returns a single character instead.
Considering it's been accepted that crashing if malloc returns a NULL is your fault, did musl really feel the need to accommodate bad implementations like this or is this just AI speculation?
Good4boothee 50 minutes ago | parent
I don't know about this specific case but in general? Yes, totally. No one is going to fix all existing software that depends on libs behaving exactly as glibc, you have to accept some trade-offs. Either your new implementation stops being perfectly simple and clean, or no one uses it.
Palomides 9 minutes ago | parent
red75prime 49 minutes ago | parent
[1] https://git.musl-libc.org/cgit/musl/commit/?id=b3c4cc121f70f...
afc 26 minutes ago | parent
Maybe I should update my plea to fail loudly (https://alejo.ch/3gk) to list this as an example.
01HNNWZ0MV43FF 15 minutes ago | parent
jdw64 1 hour ago | parent
ordu 45 minutes ago | parent
jdw64 40 minutes ago | parent
I also found scroll-triggered animations hard to read at first, but these days a lot of sites use them, so I've gotten used to them.
vavkamil 23 minutes ago | parent
sneela 1 hour ago | parent
Also, what's with this damn trend of typing in lowercase only? Why is this a thing?
> oh did i say "i"? sorry. i had agent swarms. a lot of them. let's not get into it
Still a cool finding... it's just the communication is becoming a lot worse these days - I want to understand the findings please, not be impressed by your webpage! Biggest gripe in recent memory is https://github.com/xoreaxeaxeax/skitter-creek-bath-salts
lclc 1 hour ago | parent
blueflow 58 minutes ago | parent
Good4boothee 48 minutes ago | parent
ChrisRR 1 hour ago | parent
Edit: It seems to work fine on mobile. I'm not sure why the scrolling behaviour was added on the desktop version of the site
nxobject 1 hour ago | parent
rustyhancock 48 minutes ago | parent
I think for any one of those bugs there might simply be half a dozen footguns or bugs that once it's spelled out you wonder how anyone let it slide.
I think that's the case where LLMs might indentify most.
It's challenging though as the current AI audits produce so many false positives it's hard to know when it's being pedantic or when it's genuinely caught a human being a bone head
jamal-kumar 21 minutes ago | parent
semiquaver 44 minutes ago | parent
trebligdivad 43 minutes ago | parent
Each one relies on a perfectly valid argument - that * can't match because we all know it'll be rejected by the other thing.
Retr0id 32 minutes ago | parent
But that's not a perfectly valid argument, and it never was.
zarzavat 30 minutes ago | parent
01HNNWZ0MV43FF 20 minutes ago | parent
oneeyedpigeon 18 minutes ago | parent
dmantis 15 minutes ago | parent
While not mandatory, a person would probably use it instead of the * hack.
Simply because the calling side wouldn't have an option to forget the check like with the NULL case
ninkendo 2 minutes ago | parent
nh2 11 minutes ago | parent
The whole thing exists because APIs that return a NULL value that "nobody checks", plus a string that you shouldn't use if you actually did check the null value.
In languages with sum types, this cannot happen.
Either you get your hash, or no result at all. You couldn't get eg NULL and *.
win311fwg 2 minutes ago | parent
Funny, C has sum types (disjointed union is a sum type) and it still happened.
The use of sum types may have helped, especially when combined with a tag which is trivial to do in C, but a language having sum types does not imply that the authors will use them.
muvlon 7 minutes ago | parent
- sum/union types
- multiple return values/tuple types
- exceptions
means that most ways of returning an error from a function are not available in C. Because of this, many C APIs, including `crypt` in this case, resort to in-band error signalling by using a sentinel value (like NULL, a negative integer, "*" etc.).
Most other languages lack one or two of the above, but very few lack all three, and so most have developed a different culture around error reporting (Result in Rust, multiple return values in Go, exceptions in Java, Python etc.).
K0nserv 4 minutes ago | parent
struct Input<'a>(&'a [u8]);
impl<'a> Input<'a> {
fn new(input: &'a [u8]) -> Result<Self, Error> {
if input.len() >= 256 {
return Err(Errro...);
}
Ok(Self(input))
}
}
Now the truncation is a terrible idea in the first place, but at least with this it would have been entirely obvious to the caller that it was there.yangm97 13 minutes ago | parent
Granted I mostly work with high level programming languages so I may be missing something.
WesolyKubeczek 2 minutes ago | parent
When later it turned out that musl's procrustian stack size made Python not really runnable under it, it cemented my resolve to not go near musl.
And now we have this.
scandinavian 1 hour ago | parent
Am I doing anything wrong here?
OpenSSH_10.3p1, OpenSSL 3.5.9 29 Sep 2026
PRETTY_NAME="Alpine Linux v3.24"
atmosx 44 minutes ago | parent
emayljames 42 minutes ago | parent
f311a 37 minutes ago | parent
zamadatix 15 minutes ago | parent
q3k 30 minutes ago | parent
Last two entries in /etc/shadow:
test:*:20762:0:99999:7:::
q3k:$6$snip.GgDQNTrqqX.A0:20762:0:99999:7:::
SSHing into test@ with one 'wrong' password then one 'long' password doesn't work. I have UsePAM no and PasswordAuthentication yes in my sshd_config.hagbard_c 23 minutes ago | parent
markuman123 3 minutes ago | parent
henry700 58 minutes ago | parent
RVuRnvbM2e 52 minutes ago | parent
draxen 51 minutes ago | parent
sam_lowry_ 48 minutes ago | parent
Never enabled sshd there... except on my PostmarketOS PineBook Pro... oh shit!
andunie 43 minutes ago | parent
Is it mainly that it is too big?
I feel like everybody still loves the unix philosophy, but the previous tools were too bad, systemd just filled user demand for easier tools.
The moment someone makes a pid 1 software that is good and still modular, open and pluggable I think that will be an instant success.
stogot 48 minutes ago | parent
oefrha 48 minutes ago | parent
Can we have a “don’t treat me like five/toddler” / “idgaf about the explanation” quick link to a section for adults who need to patch systems?
(And if your reaction is “just scroll down, stupid”, I’m happy to report that with the scroll jacking, I scroll not enough / past the critical sections nine out of ten times.)
Edit: You may want to read https://sshhole.com/#exposure.
rmunn 40 minutes ago | parent
jamal-kumar 23 minutes ago | parent
traceroute66 47 minutes ago | parent
Its not asking for trouble, it is there will be trouble, not if but when.
As for the people who say "well, I run SSH on port 942329053052". Well guess what, the bots make short work on that. We tried it at $work as an experiment, multiple bots found it in less than a couple of hours. That's why your SSH config must be hardened, preferably running on a hardened OS too.
znnajdla 42 minutes ago | parent
traceroute66 39 minutes ago | parent
Does it ?
Somebody here has already said "You can set PasswordAuthentication=no or update to remediate"
We don't use musl at $work anyway, so I've no means to test.
sjamaan 33 minutes ago | parent
tialaramex 31 minutes ago | parent
You > This particular bug works even with password authentication turned off.
No. The bug is related to password authentication. If you do not have password authentication then you are not affected.
What freaks some people out is they chose parameters where they do have password authentication but they expect to always fail. That's a bad choice, like OK you did fit a cheap manual keyhole, but you threw the keys away thinking now nobody can open that - you realise somebody with a cheap jiggler can open it right ?
ghm2180 39 minutes ago | parent
Ecco 27 minutes ago | parent
In other words, conceptually, at the end if the day, isn’t a key just another name for a password, really?
Borealid 12 minutes ago | parent
Keys are usually at least 128 bits of entropy, and it's easy to take them up to 256.
Yes, both are a shared secret, but password auth - even with challenge-response - is weaker than key auth exactly because key auth provides more guess resistance.
throooooo 45 minutes ago | parent
BoppreH 43 minutes ago | parent
[1] https://en.wikipedia.org/wiki/In-band_signaling#Computer_dat...
wolrah 11 minutes ago | parent
Microsoft has historically been one of the leaders on the wrong side of this one, but they have also demonstrated how effective it is to call out badly behaved software and make it annoy the users with UAC. When Vista came out, so many applications needed elevated privileges to run because they were badly designed to write user data in system locations, but now their application was more annoying to use and came with a scary dialog about it making changes to your computer that other better-designed software didn't get.
More often than not if a program didn't actually intend to change system settings it was just a matter of badly chosen default paths which are pretty trivial to fix, but so many vendors just would not do it despite years of complaints from NT admins wanting to not have to spend hours with Process Explorer figuring out specific permissions to grant limited users enough access. Once their failures were put front and center, calling their application out as the one getting things wrong every time the user ran it, they suddenly had motivation to fix it.
throw10920 7 minutes ago | parent
If /etc/shadow was a JSON (or XML, even, although that would make me feel gross), this bug would have been much easier to see, because a field that reads '"hash": ""' sticks out a lot* more than a custom microformat that you don't understand.
With data structures, there's never "plain text" - it's all structured. The question is whether you want to use existing formats and tools, or create a new one for every tool and literally make footguns like this.
paaloeye 42 minutes ago | parent
NavinF 41 minutes ago | parent
philipwhiuk 35 minutes ago | parent
ctrlaltdileep 33 minutes ago | parent
0x0 31 minutes ago | parent
dhx 6 minutes ago | parent
> root@OpenWrt:~# cat /etc/openwrt_release | grep DISTRIB_RELEASE
> DISTRIB_RELEASE='25.12.6'
> root@OpenWrt:~# which ssh
> /usr/bin/ssh
> root@OpenWrt:~# ssh -V
> Dropbear v2025.89
> root@OpenWrt:~# ldd /usr/bin/ssh
> /lib/ld-musl-aarch64.so.1 (0x7f8e120000)
> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x7f8e0b8000)
> libc.so => /lib/ld-musl-aarch64.so.1 (0x7f8e120000)
> root@OpenWrt:~# which dropbear
> /usr/sbin/dropbear
> root@OpenWrt:~# dropbear -V
> Dropbear v2025.89
> root@OpenWrt:~# ldd /usr/sbin/dropbear
> /lib/ld-musl-aarch64.so.1 (0x7fbb900000)
> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x7fbb898000)
> libc.so => /lib/ld-musl-aarch64.so.1 (0x7fbb900000)
> root@OpenWrt:~# apk search openssh
> openssh-client-10.6_p1-r2
> openssh-client-utils-10.6_p1-r2
> openssh-keygen-10.6_p1-r2
> openssh-moduli-10.6_p1-r2
> openssh-server-10.6_p1-r2
> openssh-server-pam-10.6_p1-r2
> openssh-sftp-avahi-service-10.6_p1-r2
> openssh-sftp-client-10.6_p1-r2
> openssh-sftp-server-10.6_p1-r2
> openssh-sk-helper-10.6_p1-r2MarkBlah 26 minutes ago | parent
shaolinspirit 21 minutes ago | parent
littlecranky67 9 minutes ago | parent
Can we please now normalize AI usage in development? Just some other day people asked for "NO AI used" badges for software as measure for quality, and praised i.e. NetBSD for being AI-free. Yes, we come from a phase of AI slop, but it has become obvious that there are plenty of legit usecases where AI beats human-only effort nowadays.
HackerThemAll 6 minutes ago | parent
tomaskafka 5 minutes ago | parent
sidneythekidney 2 minutes ago | parent
I was able to reproduce this on Alpine 3.23.7 with OpenSSH_10.2p1.
Luckily PermitRootLogin [0] hasn't defaulted to yes since 2015 [1]. I'm guessing that's at least part of why this went undiscovered for so long.
0: https://man.openbsd.org/sshd_config#PermitRootLogin 1: https://cvsweb.openbsd.org/diff/src/usr.bin/ssh/sshd_config?...
DonHopkins 1 minute ago | parent