SCRIPT
#!/bin/bash
# ==============================================================================
# Nom du Script : newsletter_CVE.sh
# Auteur : Julien GARCIA
# Date de création : 22/05/2024
# Version : 1.0
# Mise à jour : [Date de la dernière mise à jour]
# Description : Ce script automatise la récupération des CVE pour différents
# vendors et concatène les résultats dans un ou plusieurs fichiers JSON.
# Il envoie ensuite un email avec le fichier JSON en pièce jointe.
# Usage : ./auto_CVE.sh
# Dépendances : Assurez-vous que le script 'cvemap' est présent et exécutable.
# Historique :
# - [Date] : [Description de la mise à jour]
# - [Date] : [Description de la mise à jour]
# Remarques :
# - Ce script nécessite bash, jq, et sendmail.
# - Les vendors sont listés en minuscules.
# ==============================================================================
# Fonction pour obtenir la date au format YYYYMMDD
get_current_date() {
date +"%Y%m%d"
}
# Liste des vendors en minuscules
# Au besoin, chercher votre vendeur depuis : https://www.cvedetails.com/vendor-search.php
vendors=(
fortinet
checkpoint
paloaltonetworks
cisco
stormshield
f5
php
apache
microsoft
)
# Parcourir chaque vendor
for vendor in "${vendors[@]}"
do
# Convertir le vendor en minuscules
lowercase_vendor=$(echo "$vendor" | tr '[:upper:]' '[:lower:]')
# Date du jour au format YYYYMMDD
current_date=$(get_current_date)
# Nom du répertoire pour la date actuelle
directory="${current_date}"
# Vérifier si le répertoire existe, sinon le créer
if [ ! -d "$directory" ]; then
mkdir "$directory"
fi
# Nom du fichier JSON avec chemin complet
json_filename="${directory}/${current_date}_${lowercase_vendor}.json"
# Remplacer le placeholder par le vendor actuel et ajouter l'option -json avec le nom de fichier
command="./cvemap -vendor \"$lowercase_vendor\" -fe 'template' -f kev -age '< 31' -json > \"$json_filename\""
# Afficher la commande avec le vendor remplacé
echo "Commande avec \"$vendor\":"
echo "$command"
echo "--------------------"
# Exécuter la commande avec eval
eval "$command"
done
# Concaténer tous les fichiers JSON dans un seul fichier "all_YYYYMMDD.json"
# Nom du fichier de sortie
output_json_filename="${directory}/all_${current_date}.json"
# Concaténation de tous les fichiers JSON dans un seul fichier
cat "${directory}"/*.json > "$output_json_filename"
# Afficher le message de confirmation
echo "Fichiers JSON concaténés dans ${output_json_filename}"
# Envoi de l'email avec le fichier JSON en pièce jointe
recipient="service-it@domain.tld"
sender="noreply@domain.tld"
subject="Newsletter CVE"
body="Veuillez trouver ci-joint le fichier JSON contenant les CVE."
# Commande pour envoyer l'email
(
echo "From: $sender"
echo "To: $recipient"
echo "Subject: $subject"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=\"FILEBOUNDARY\""
echo
echo "--FILEBOUNDARY"
echo "Content-Type: text/plain"
echo
echo "$body"
echo
echo "--FILEBOUNDARY"
echo "Content-Type: application/json; name=\"all_${current_date}.json\""
echo "Content-Disposition: attachment; filename=\"all_${current_date}.json\""
echo "Content-Transfer-Encoding: base64"
echo
base64 "$output_json_filename"
echo
echo "--FILEBOUNDARY--"
) | sendmail -t
# Afficher le message de confirmation de l'envoi de l'email
echo "Email envoyé à $recipient avec la pièce jointe $output_json_filename"
Last updated