|
@@ -1,43 +0,0 @@
|
|
|
-/*
|
|
|
- * If the OS provides it, call SetDefaultDllDirectories() to prevent
|
|
|
- * DLLs from being loaded from the directory containing our own
|
|
|
- * binary, and instead only load from system32.
|
|
|
- *
|
|
|
- * This is a protection against hijacking attacks, if someone runs
|
|
|
- * PuTTY directly from their web browser's download directory having
|
|
|
- * previously been enticed into clicking on an unwise link that
|
|
|
- * downloaded a malicious DLL to the same directory under one of
|
|
|
- * various magic names that seem to be things that standard Windows
|
|
|
- * DLLs delegate to.
|
|
|
- *
|
|
|
- * It shouldn't break deliberate loading of user-provided DLLs such as
|
|
|
- * GSSAPI providers, because those are specified by their full
|
|
|
- * pathname by the user-provided configuration.
|
|
|
- */
|
|
|
-
|
|
|
-#include "putty.h"
|
|
|
-
|
|
|
-void dll_hijacking_protection(void)
|
|
|
-{
|
|
|
- static HMODULE kernel32_module;
|
|
|
- DECL_WINDOWS_FUNCTION(static, BOOL, SetDefaultDllDirectories, (DWORD));
|
|
|
-
|
|
|
- if (!kernel32_module) {
|
|
|
- kernel32_module = load_system32_dll("kernel32.dll");
|
|
|
-#if !HAVE_SETDEFAULTDLLDIRECTORIES
|
|
|
- /* For older Visual Studio, this function isn't available in
|
|
|
- * the header files to type-check */
|
|
|
- GET_WINDOWS_FUNCTION_NO_TYPECHECK(
|
|
|
- kernel32_module, SetDefaultDllDirectories);
|
|
|
-#else
|
|
|
- GET_WINDOWS_FUNCTION(kernel32_module, SetDefaultDllDirectories);
|
|
|
-#endif
|
|
|
- }
|
|
|
-
|
|
|
- if (p_SetDefaultDllDirectories) {
|
|
|
- /* LOAD_LIBRARY_SEARCH_SYSTEM32 and explicitly specified
|
|
|
- * directories only */
|
|
|
- p_SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32 |
|
|
|
- LOAD_LIBRARY_SEARCH_USER_DIRS);
|
|
|
- }
|
|
|
-}
|