When a client sends a request with no passphrase to Unreal Remote Control's "/remote/batch" endpoint, and the plugin is configured to not perform passphrase verification, the Editor will crash as soon as the request is received.
The crash happens in file "WebRemoteControl.cpp", function FWebRemoteControlModule::HandleBatchRequest(), line 930. This attempts to access the "Passphrase" header on the request, but it might not exist. Note that this line was added by CL 19263496, which included handling a non-existing passphrase header on multiple code paths, but not on FWebRemoteControlModule::HandleBatchRequest().
The crash only occurs if the plugin is configured to not perform passphrase verification (otherwise it will correctly deny the request before getting to the crash point). This is the case, for example, with the following settings (which can be set on "DefaultRemoteControl.ini" or through the Project Settings):
1. Enable plugin "Remote Control API" and restart the Editor
2. Use "curl", "Invoke-RestMethod", Postman or another tool to send a request to the "/remote/batch" endpoint
3. Crash!
PowerShell:
Invoke-RestMethod `
-Uri "http://127.0.0.1`:30010/remote/batch" `
-Method Put `
-Body '
{"Requests": []}' `
-ContentType "application/json"
curl (Windows):
curl -s -X PUT [Link Removed] ^
-H "Content-Type: application/json" ^
-d "
{\"Requests\": []}"
curl (Linux):
curl -s -X PUT [Link Removed] \
-H "Content-Type: application/json" \
-d '
{"Requests": []}'
UnrealEditor-WebRemoteControl.dll!TMapBase<FString,TArray<FString,TSizedDefaultAllocator<32>>,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FString,TArray<FString,TSizedDefaultAllocator<32>>,0>>::FindChecked(const FString &) Line 635 C++
UnrealEditor-WebRemoteControl.dll!TMap<FString,TArray<FString,TSizedDefaultAllocator<32>>,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FString,TArray<FString,TSizedDefaultAllocator<32>>,0>>::operator[](const FString &) Line 1412 C++
UnrealEditor-WebRemoteControl.dll!FWebRemoteControlModule::HandleBatchRequest(const FHttpServerRequest & Request, const TFunction<void __cdecl(TUniquePtr<FHttpServerResponse,TDefaultDelete<FHttpServerResponse>> &&)> & OnComplete) Line 930 C++
UnrealEditor-WebRemoteControl.dll!Invoke(bool(FWebRemoteControlModule::*)(const FHttpServerRequest &, const TFunction<void __cdecl(TUniquePtr<FHttpServerResponse,TDefaultDelete<FHttpServerResponse>> &&)> &)) Line 66 C++
UnrealEditor-WebRemoteControl.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(bool(FWebRemoteControlModule::*)(const FHttpServerRequest &, const TFunction<void __cdecl(TUniquePtr<FHttpServerResponse,TDefaultDelete<FHttpServerResponse>> &&)> &) &) Line 326 C++
UnrealEditor-WebRemoteControl.dll!TBaseRawMethodDelegateInstance<0,FWebRemoteControlModule,bool __cdecl(FHttpServerRequest const &,TFunction<void __cdecl(TUniquePtr<FHttpServerResponse,TDefaultDelete<FHttpServerResponse>> &&)> const &),FDefaultDelegateUserPolicy>::Execute(const FHttpServerRequest & <Params_0>, const TFunction<void __cdecl(TUniquePtr<FHttpServerResponse,TDefaultDelete<FHttpServerResponse>> &&)> & <Params_1>) Line 552 C++
UnrealEditor-HTTPServer.dll!TDelegate<bool __cdecl(FHttpServerRequest const &,TFunction<void __cdecl(TUniquePtr<FHttpServerResponse,TDefaultDelete<FHttpServerResponse>> &&)> const &),FDefaultDelegateUserPolicy>::Execute(const FHttpServerRequest &) Line 614 C++
UnrealEditor-HTTPServer.dll!FHttpConnection::ProcessRequest(const TSharedPtr<FHttpServerRequest,1> & Request, const TFunction<void __cdecl(TUniquePtr<FHttpServerResponse,TDefaultDelete<FHttpServerResponse>> &&)> & OnProcessingComplete) Line 213 C++
UnrealEditor-HTTPServer.dll!FHttpConnection::CompleteRead(const TSharedPtr<FHttpServerRequest,1> & Request) Line 191 C++
UnrealEditor-HTTPServer.dll!FHttpConnection::ContinueRead(float DeltaTime) Line 148 C++
UnrealEditor-HTTPServer.dll!FHttpConnection::BeginRead(float DeltaTime) Line 127 C++
UnrealEditor-HTTPServer.dll!FHttpConnection::Tick(float DeltaTime) Line 54 C++
UnrealEditor-HTTPServer.dll!FHttpListener::TickConnections(float DeltaTime) Line 232 C++
UnrealEditor-HTTPServer.dll!FHttpListener::Tick(float DeltaTime) Line 163 C++
UnrealEditor-HTTPServer.dll!FHttpServerModule::Tick(float DeltaTime) Line 189 C++
UnrealEditor-Core.dll!Invoke(bool(FTSTickerObjectBase::*)(float)) Line 66 C++
UnrealEditor-Core.dll!UE::Core::Private::Tuple::TTupleBase<TIntegerSequence<unsigned int>>::ApplyAfter(bool(FTSTickerObjectBase::*)(float) &) Line 326 C++
UnrealEditor-Core.dll!TBaseRawMethodDelegateInstance<0,FTSTickerObjectBase,bool __cdecl(float),FDefaultDelegateUserPolicy>::Execute(float <Params_0>) Line 552 C++
UnrealEditor-Core.dll!TDelegate<bool __cdecl(float),FDefaultDelegateUserPolicy>::Execute(float) Line 614 C++
UnrealEditor-Core.dll!FTSTicker::FElement::
{ctor}::_l1::<lambda_28>::operator()(float DeltaTime) Line 166 C++
UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefBase<UE::Core::Private::Function::TFunctionStorage<1>,bool __cdecl(float)>::operator()(float <Params_0>) Line 414 C++
UnrealEditor-Core.dll!FTSTicker::FElement::Fire(float) Line 179 C++
UnrealEditor-Core.dll!FTSTicker::Tick(float DeltaTime) Line 121 C++
UnrealEditor.exe!FEngineLoop::Tick() Line 6073 C++
UnrealEditor.exe!EngineTick() Line 60 C++
UnrealEditor.exe!GuardedMain(const wchar_t * CmdLine) Line 190 C++
UnrealEditor.exe!LaunchWindowsStartup(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow, const wchar_t * CmdLine) Line 266 C++
UnrealEditor.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * pCmdLine, int nCmdShow) Line 334 C++
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-370949 in the post.
| 0 |
| Component | UE - Virtual Production - IO - RemoteControl |
|---|---|
| Affects Versions | 5.3, 5.8 |
| Created | Mar 20, 2026 |
|---|---|
| Updated | Mar 25, 2026 |