Technically their program told windows to write to their stack at an arbitrary time in the future. Windows then did what it was told to do causing this bug.
Windows only writes to the location because the program gave it that pointer. It's the program's fault that they gave a pointer to an async API when they didn't first guarantee that said pointer would be valid in the future. Really there should be tooling for catching this kind of thing (there is on Linux but less so on Windows).