microsoft, you know that resuming HTTP downloads has been a solved problem since, uh, 1997?
It's a 22gb file and it can go as fast as half a gigabit/s but it keeps just hanging at like 14gb in. Your only option is to cancel and try again, which starts from byte 0
they mention this might be a problem in one of the many FAQs, and they recommend you fix it by getting better internet
I should MITM myself and see if I can figure out where it's downloading these files, and just curl it
I'd be tempted to launch my win95 VM ad use GetRight to download it, but I imagine it'd have some issues with TLS and certificates and such

oh right I need to install TCP/IP onto my windows 95 machine first

lemme find my win95 floppies

Nah, MS won't let you download the file over HTTP, and this version of GetRight from 1997 doesn't support HTTPS.

the curl download failed with a connection reset after 17 minutes and 20gb!

so I tell curl to resume it, and... the server starts over from the beginning.

MICROSOFT'S STUPID SERVER DOESN'T SUPPORT THE RANGE HEADER

IT'S 2026 BUY A REAL COMPUTER

anger canceled, I was just misreading curl. it did resume.

so again, why doesn't microsoft's official tool do this?

anyway I have the file now. There's a metadata JSON file that I don't have, but it looks very fakable. Then I can use the official recovery tool to build me a bootable USB drive, like it's supposed to be able to do
FUN FACT: the Surface IT Tool doesn't seem to validate any of the windows version info you give it in the JSON file!
yeah no it just failed verification. So I'm just going to try to download it, again, and again, and again, until I get lucky
it already hung

currently on attempt #8

#7 made it to 17gb (of 22gb)!

slightly tempted to automate it. watch the screen for the visible download amount, and if it hasn't changed in Xty seconds, hit cancel, restart.
cross your fingers, we're at 19gb and still climbing at 76 Mbps!
21gb!!!!
OH MY GOD ARE YOU SERIOUSLY DOING THIS, MICROSOFT

bad idea: I already MITM'd this once.

I download the file with curl and stick it on a local fast server. Then I set up mitmproxy to silently rewrite requests to their shitty server to my local one, which will be an actual server that works and doesn't randomly drop connections once out of EVERY FUCKING TIME

annoyingly I already deleted the file I downloaded earlier.

(I'm juggling laserdisc archival files right now, so my laptop has a VERY full hard drive, and I thought I was done with that file when it failed verification)

my first attempt and curling it stalled at 16mb.

not gigabytes, megabytes.

hey microsoft could I mail you some blank floppies and you just return 'em with the file on it? that might be easier at this point

my best guess for what is happening: I'm getting randomly loadbalanced onto a bunch of very overloaded servers.

I have downloaded the file and I'm now copying it onto my local server.

why didn't I just download it on my local server in the first place, so I wouldn't have to copy it across my house's network?

good question.

okay the files all moved locally so I can just make mitmproxy point it at the different URL. but I think I have been screaming at this problem enough for one day, so I'm going to stop for tonight.

the surface hub has not defeated me yet, I fight on

I lied. mitmproxy is now redirected to my local server, and Surface IT Tool is downloading from it.

annoyingly slowly, actually. Only 51Mbps? this is 22gb!

(it's probably because mitmproxy is handling all the bytes instead of letting nginx do it)

okay I have made a recovery disk by using the MITM download hack

how much do you want to bet this thing won't even boot?

it boots! it's now recovering

this may finally get us incrementally closer to a version of windows that actually works

It replaced the windows logo during boot with the teams logo
It just showed that it was logging into a user account named "Skype"
Yeah I can't get past the setup. It gives me two accounts, Skype and Administrator, and the latter is passworded, and the former doesn't work because I can't login to a Skype account
This machine is a fractal paperweight
There are two recovery images I have that work. One of them boots to an environment that can't use the store and can't run software until it gets to the store.
The other can't log in because Skype is gone
IT LIVES! AND WE HAVE UNKIOSKED WINDOWS 11 IoT!
The trick was installing MTR (Microsoft Teams for Rooms) and then logging into the passworded Administrator account ("sfb": "Skype For Business") and deleting the Skype account. Now it boots to 11 IoT and I can run updates
And the machine can finally, FINALLY after 4 days become useful and a real computer:
Windows if you fuck me here after all I've been through, I swear to god...
okay so if you are unfortunate enough to get a Surface Hub 2S and want to make it run Useful Windows (linux would be nice but I haven't figured out how to boot it) instead of Broken Windows, you need to:
1. Get the Surface IT Tools
2. Go through the whole SEMM mode enrollment with the private key and such
3. Try to create a Surface 2S MTR 22H2 recovery disk. The download will fail
3a. MITM Surface IT Tools to get the URL of the 22gb file you need.
@foone Install the 2023 secure boot keys (which can be done on all systems that trust the Microsoft KEK) and you will be able to boot any Linux installer signed with the 2023 keys (which uh ok not sure which off-hand)
@mjg59 I'm not sure how I'd even do that on this particular system: the UEFI is locked down, the tool to administer the UEFI doesn't let you change those settings, and it is VERY picky about what it'll boot
@foone These are designed to be updated from the OS, I can give you a win32 binary that does it
@foone Well ok I'll need to *write* that win32 binary but that's a few minutes

@mjg59 @foone Do you – by chance – know if it's also possible to administer the UEFI from Linux (sry, to hijack the thread)?

I haven't seen anything like this so far and I wonder if I just overlooked it. I have seen some tooling to do things like this from Windows for hardware from some vendors, but no tooling for all UEFI.

But I imagine this to be a standardized interface (with UEFI) and kinda expect that it could be possible. I just never really found the time to look more in depth.

@nils_ballmann @foone There's no generic way to do it. Several vendors expose this via WMI, and Powershell lets you hit arbitrary WMI endpoints, but that's a kind of security nightmare so Linux doesn't give arbitrary access that way (it's a long story). Could it be standardised? Absolutely. Nobody's done the work, though :(
@nils_ballmann @foone But a subset of things can be done. You can set new boot entries (so you can configure boot from USB even if you don't have config for that), you can install new keys if they're appropriately signed, that kind of thing

@mjg59

that's a kind of security nightmare so Linux doesn't give arbitrary access that way (it's a long story). Could it be standardised? Absolutely. Nobody's done the work, though :(

Ah okay, so my expectation is correct, but I probably could not accidentally stumble over anything because the work hasn't been done, yet. I assume this is kernel upstream work?

Is it considered a security nightmare on Windows or on Linux? Because I assume it wouldn't be if it would be protected by a proper privilege security boundary.

You can set new boot entries (so you can configure boot from USB even if you don't have config for that)

Okay, the USB thing is nice.

In my setup I still have Grub in-between, therefore some of this kind of control can be exercised this way.

And I imagine the fwupdmgr to use this to directly reboot into its firmware updater.

you can install new keys if they're appropriately signed

Is that the same functionality that fwupdmgr uses to update db, dbx and friends? Or do they do this from their FW updater EFI binary? Because this sounds like one could directly update kek and the others?

@foone

@mjg59 @foone when i did it on my windows 365 link i just used powershell in winpe but this thing is i think locked down by secure boot policy + cipolicy so...
@foone @mjg59 yeah, remember these Surface things with MS pushing the lockdown envelope all the way up to Apple, thinking they were bug enough now to avoid antitrust.
So much ewaste :-(