Skip to content

Instantly share code, notes, and snippets.

@darkerego
Created March 29, 2024 19:07
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save darkerego/b8fe6b2ebf2949b5dbfa1593204ae659 to your computer and use it in GitHub Desktop.
Save darkerego/b8fe6b2ebf2949b5dbfa1593204ae659 to your computer and use it in GitHub Desktop.
#! /bin/bash
# Modified to run both (redudantly, yes, I know, I am paranoid, you should be too) checks
#
set -eu
# find path to liblzma used by sshd
path="$(ldd $(which sshd) | grep liblzma | grep -o '/[^ ]*')"
echo 'Check one: does it even exist?'
# does it even exist?
if [ "$path" == "" ]
then
echo probably not vulnerable
# exit
fi
echo 'Check 2: function signature'
# check for function signature
if hexdump -ve '1/1 "%.2x"' "$path" | grep -q f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410
then
echo probably vulnerable
else
echo probably not vulnerable
fi
@Jay1508
Copy link

Jay1508 commented Mar 30, 2024

This script mess up with the global environment variable path. I would change it to rename the variable path eg path_cve_2024_3094="$(ldd $(which sshd) | grep liblzma | grep -o '/[^ ]*')"

@Sn0w3y
Copy link

Sn0w3y commented Mar 30, 2024

Suggestion to not use the hexdump as it needs to be installed seperately on most distros:

#! /bin/bash
# Modified to run both checks using xxd or od as fallback

set -eu

# Find path to liblzma used by sshd
path_cve_2024_3094="$(ldd $(which sshd 2>/dev/null) | grep liblzma | grep -oP '/[^ ]+')"

# Check if the path was found
if [ -z "$path_cve_2024_3094" ]; then
  echo "liblzma not found in the sshd dependencies. Your system might not be vulnerable or sshd is not installed."
  exit 1
fi

echo 'Check one: does it even exist?'
# Check if the file exists
if [ ! -f "$path_cve_2024_3094" ]; then
  echo "The liblzma file does not exist at the detected path: $path_cve_2024_3094. Probably not vulnerable."
  exit 1
fi

echo 'Check 2: function signature'

# Function to check for vulnerability using xxd or od
check_vulnerability() {
  local path="$1"
  
  # Check if xxd is available
  if command -v xxd > /dev/null; then
    xxd -p "$path" | tr -d '\n' | grep -q 'f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410' && echo "probably vulnerable" || echo "probably not vulnerable"
  elif command -v od > /dev/null; then
    # Use od as a fallback
    od -v -t x1 -An "$path" | tr -d ' \n' | grep -q 'f30f1efa554889f54c89ce5389fb81e7000000804883ec28488954241848894c2410' && echo "probably vulnerable" || echo "probably not vulnerable"
  else
    echo "Neither xxd nor od is available on this system. Cannot perform signature check."
    exit 1
  fi
}

check_vulnerability "$path_cve_2024_3094"

@amaddio
Copy link

amaddio commented Apr 2, 2024

I have updated your script @Sn0w3y with the suggestion of @eliehalimi to not use ldd. Changes I have made are

path_to_sshd=$(which sshd 2>/dev/null)
/lib64/ld-linux-x86-64.so.2 --verify "$path_to_sshd"
linked_sshd_libraries=$(LD_TRACE_LOADED_OBJECTS=1 /lib64/ld-linux-x86-64.so.2 "$path_to_sshd")
path_cve_2024_3094="$(printf "%s" "$linked_sshd_libraries" | grep liblzma | grep -oP '/[^ ]+')"

I did not want to clutter up the comment section. I have put an updated script in my gist here: https://gist.github.com/amaddio/d95391c48562f6f40235ab5e839bc1ee

@darkerego
Copy link
Author

I have updated your script @Sn0w3y with the suggestion of @eliehalimi to not use ldd. Changes I have made are

path_to_sshd=$(which sshd 2>/dev/null)
/lib64/ld-linux-x86-64.so.2 --verify "$path_to_sshd"
linked_sshd_libraries=$(LD_TRACE_LOADED_OBJECTS=1 /lib64/ld-linux-x86-64.so.2 "$path_to_sshd")
path_cve_2024_3094="$(printf "%s" "$linked_sshd_libraries" | grep liblzma | grep -oP '/[^ ]+')"

I did not want to clutter up the comment section. I have put an updated script in my gist here: https://gist.github.com/amaddio/d95391c48562f6f40235ab5e839bc1ee

Great, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment