• # Corrections

    Posté par . En réponse à la dépêche Une faille nommée « shellshock ». Évalué à 10.

    Par ailleurs, Bash ne permet pas cet export de fonctions s'il est utilisé en mode POSIX strict ( bash -p ).

    Le mode posix est bash --posix. C'est aussi le mode dans lequel on se trouve quand bash est invoqué en tant que sh.

    bash -p est un mode différent:

    Turned on whenever the real and effective user ids do not match. Disables processing of the $ENV file and importing of shell functions. Turning this option off causes the effective uid and gid to be set to the real uid and gid.

    Donc oui, bash n'est pas vulnérable avec bash -p, mais il l'est toujours en mode posix.

    Mais Bash permet en outre de passer des fonctions vers le processus enfant. Aucun autre shell ne permet cela. Dans ce cadre relativement strict, la sécurité ne pose pas de problème : les droits et contextes d'exécution sont identiques et l'utilisateur, système ou non, est le même. Ceci est documenté, il s'agit de l'option -f du shell Bash.

    Il s'agit de l'option -f de export dans le shell bash. bash -f désactive le globbing:

    $ ls
    bar foo
    $ bash -f -c 'echo *'
    *
    $ bash -c 'echo *'
    bar foo
    

    La même chose, pour passer la fonction à un sous-shell

    Quand on utilise la fonctionnalité "normalement", alors on utilise export -f plutôt que de jouer avec les variables d'environnement:

    #!/bin/bash
    # déclaration de la fonction d'affichage du message "bonjour vous", nommée mafonction :
    mafonction() {
     echo "bonjour vous";
    }
    export -f mafonction
    # exécution de la fonction dans un sous-process:
    bash -c mafonction

    La variable d'environnement commençant par () { n'est que la manière que bash a d'implémenter export -f.