IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Commande system: Insecure dependency in system while running with -T


Sujet :

Programmation et administration système Perl

Vue hybride

nicnictout Commande system: Insecure... 22/09/2017, 11h13
dmganges Bonjour, Juste pour faire... 23/09/2017, 06h16
Lolo78 Bonjour, d'abord quelques... 23/09/2017, 14h00
nicnictout Bonjour, dors et déjà... 26/09/2017, 11h09
dmganges Bonjour, 1) En fait la... 26/09/2017, 13h33
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Par défaut Commande system: Insecure dependency in system while running with -T
    Bonjour,

    j'essaie de me mettre à Perl, mais plus ça va, plus ce langage me rend dingue... Bon faut dire que la prog n'est pas mon truc préférée non plus

    Bref, j'essaie de faire un petit programme tout con, qui fait une requête vers une base de donnée, récupère des ID et les passe en argument d'un executable d'un autre logiciel.

    Voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #!/usr/bin/perl
     
     
    #use strict;
    use warnings;
    use lib '/exploit/OV/share/bin';
    use AF_OV;
     
    my $request=<<END;
    SELECT DISTINCT OPC_ACT_MESSAGES.MESSAGE_NUMBER FROM OPC_ACT_MESSAGES,OPC_ESCAL_ASSIGN_M WHERE (OPC_ACT_MESSAGES.receiving_time Between $DELTA_TIME AND $ACTUAL_TIME) AND (OPC_ACT_MESSAGES.SEVERITY<>2) AND (OPC_ESCAL_ASSIGN_M.MESSAGE_NUMBER=OPC_ACT_MESSAGES.MESSAGE_NUMBER AND (OPC_ESCAL_ASSIGN_M.OP_NAME<>'OpC' OR OPC_ESCAL_ASSIGN_M.OP_NAME is NOT null));
    END
    my @result = AF_OV::exec_sql($request);
    #print "$request";
     
    my $id;
    my $tmpfile='/tmp/idlist';
     
    #nettoyage fichier tmp
    unlink $tmpfile;
    open (FICHIER, ">>$tmpfile") || die ("Vous ne pouvez pas créer le fichier \"idlist\"");
     
    # recuperation des IDs et ecriture dans un fichier tmp
    foreach $id (@result) {
            chomp $id;
            my $CMD = ("/opt/OV/bin/OpC/opccmachg -user AF -id $id -async COMMENTAIRE=Ticket_pris_en_charge");
            print FICHIER "$CMD\n";
                    }
    close (FICHIER);
     
    open (my $cmd,'<',$tmpfile) || die ("Vous ne pouvez pas ouvrir le fichier \"idlist\"");
    while ($line = <$cmd>) {
    system "$line";
    }
    close (FICHIER);
    J'ai tout tenté:
    1) Passer directement le $CMD à la commande system
    2) Passer par un fichier temporaire et demander a juste executer les lignes, au cas où cela soit un problème de portée de variable
    3) Appel d'un script bash extérieur qui lancerait les commandes opccmachg

    Mais j'ai toujours et systématiquement le même message d'erreur:
    Insecure dependency in system while running with -T switch at <mon script>

    J'ai passé la journée entière hier a chercher sur le net (et je me sens étrangement seul sur Google avec ce message d'erreur), a tenter de comprendre ce qui n'allait pas, j'ai tenté plusieurs syntaxe/algo différents.... mais toujours le même mur à la fin.
    Franchement je suis a 2 doigts de me dire que je vais repasser au Bash pour faire le job, mais d'un autre coté cela me rend fou de pas comprendre maintenant !

    Voilà, j'espère que l'on pourra m'aider, ce n'est plus tant que je sois dans la mouise si je n'y arrive pas, que de refuser que la machine soit plus forte que moi
    D'avance merci

  2. #2
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 447
    Par défaut
    Bonjour,
    Juste pour faire démarrer le schmilblick, mais sans grande conviction

    1) Peux-tu essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach $id (@result) {
            chomp $id;
            my @CMD = "/opt/OV/bin/OpC/opccmachg -user AF -id $id -async COMMENTAIRE=Ticket_pris_en_charge";
      print "==@CMD==\n";
            system @CMD;
    }
    NB : CMD est un tableau, et sans les parenthèses...

    2) Peux-tu copier ici le contenu d'un print "==@CMD==\n";
    histoire de voir comment il est formaté... ça pourrait nous donner des idées...

    [EDIT 06:30] ajout

    3) Peux-tu tester une commande basic, pour s'assurer que ce n'est pas un pb de droit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl
    use strict;
    use warnings;
    my @CMD = "ps -ef";
    system @CMD;
    [EDIT 06:50] Ajout
    Désolé ça me vient au compte gouttes
    Tester également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach $id (@result) {
            chomp $id;
            my @CMD = "/opt/OV/bin/OpC/opccmachg -user AF -id " $id " -async COMMENTAIRE=Ticket_pris_en_charge";
      print "==$id==@CMD==\n";
            system @CMD;
    }
    [EDIT 08:23] Dernière goutte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach $id (@result) {
            chomp $id;
            my @CMD = ('/opt/OV/bin/OpC/opccmachg -user AF -id ', $id, ' -async COMMENTAIRE=Ticket_pris_en_charge');
      print "==$id==@CMD==\n";
            system @CMD;
    }

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    d'abord quelques questions:
    • Peux-tu donner le message d'erreur en entier (je suppose qu'il doit y avoir un numéro de ligne où l'erreur a lieu)?
    • C'est quoi comme base de données?
    • C'est quoi, le module AF_OV?
    • Est-ce un module fait maison ou un module fourni par un tiers?


    C'est très probablement le module AF_OV qui est responsable du problème en activant le mode taint (en utilisant l'option -T au début). Peux-tu vérifier si le début de ce module contient -T ?

    Ce mode t'interdit d'utiliser certaines commandes système jugées dangereuses du point de vue de la sécurité. Ou, plus précisément, il t'interdit d'utiliser des données provenant de l'extérieur de ton programme pour affecter quelque chose d'autre également extérieur à ton programme, car ces données sont susceptibles d'être dangereuses ou de faire quelque chose de dangereux.

    Dans ton cas, les lignes récupérées dans la base de données sont sans doute "contaminées" (tainted). Ici, tu fais plusieurs choses susceptibles d'être dangereuses avec ces données contaminées, en particulier l'appel système utilisant les données récupérées de la base, mais peut-être aussi d'autres. C'est la raison pour laquelle je te demande le numéro de ligne de l'erreur (ou, si ton code n'est pas exactement le même que celui présenté ci-dessus, le code se trouvant dans la ligne en question).

    On peut vérifier si les données sont contaminées en utilisant le module standard Scalar::Util. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    use Scalar::Util qw/tainted/;
    # ...
    print "Contaminé!\n" if tainted($result[0];
    On peut "décontaminer" (untaint) ces données notamment à l'aide d'expressions régulières, mais j'aurais besoin de connaître le contenu de ce qui a été récupéré dans la base (le tableau @result) pour suggérer une manière précise (et si possible sûre) de le faire.

    Peux-tu donc:
    • Vérifier si les lignes du tableau @result sont bien contaminées comme je le crois (en utilisant par exemple le bout de code ci-dessus);
    • Afficher ces lignes et les poster pour que l'on puisse réfléchir à comment les décontaminer.

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Par défaut
    Bonjour,

    dors et déjà merci de votre aide sur le sujet, et désolé de ne pas avoir répondu hier, on m'a bloqué en urgence sur le "Run".
    Alors je vais essayé de répondre à toutes vos questions:

    Question Dmganges (je fournis les output de chaque bout de code fourni):
    1-2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ==/opt/OV/bin/OpC/opccmachg -user AF -id 072a948c-a295-71e7-06cb-0a465e190000 -async COMMENTAIRE=Ticket_pris_en_charge==
    Insecure dependency in system while running with -T switch at /tech/OV/mgmt/bin/OML_CMA_OPERATOR.pl line 46.

    3) OK ça marche (suis root de la machine)

    4)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @CMD = "/opt/OV/bin/OpC/opccmachg -user AF -id " $id " -async COMMENTAIRE=Ticket_pris_en_charge";
    Erreur de compilation:
    Scalar found where operator expected at /tech/OV/mgmt/bin/OML_CMA_OPERATOR.pl line 45, near ""/opt/OV/bin/OpC/opccmachg -user AF -id " $id"
    (Missing operator before $id?)
    String found where operator expected at /tech/OV/mgmt/bin/OML_CMA_OPERATOR.pl line 45, near "$id " -async COMMENTAIRE=Ticket_pris_en_charge""
    (Missing operator before " -async COMMENTAIRE=Ticket_pris_en_charge"?)
    syntax error at /tech/OV/mgmt/bin/OML_CMA_OPERATOR.pl line 45, near ""/opt/OV/bin/OpC/opccmachg -user AF -id " $id "


    5)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @CMD = ('/opt/OV/bin/OpC/opccmachg -user AF -id ', $id, ' -async COMMENTAIRE=Ticket_pris_en_charge');
    ==072a948c-a295-71e7-06cb-0a465e190000==/opt/OV/bin/OpC/opccmachg -user AF -id 072a948c-a295-71e7-06cb-0a465e190000 -async COMMENTAIRE=Ticket_pris_en_charge==
    Insecure dependency in system while running with -T switch at /tech/OV/mgmt/bin/OML_CMA_OPERATOR.pl line 47.




    Question Lolo:
    1) Peux-tu donner le message d'erreur en entier (je suppose qu'il doit y avoir un numéro de ligne où l'erreur a lieu)?
    Voici le bout de code de mon prog:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     37 # recuperation des IDs et ecriture dans un fichier tmp
         38 foreach $id (@result) {
         39         chomp $id;
         40         my @CMD = "/opt/OV/bin/OpC/opccmachg -user AF -id $id -async COMMENTAIRE=Ticket_pris_en_charge";
         41         system @CMD;
         42 }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Insecure dependency in system while running with -T switch at /tech/OV/mgmt/bin/OML_CMA_OPERATOR.pl line 41.
    2) C'est quoi comme base de données?
    Oracle

    3) C'est quoi, le module AF_OV?
    C'est un module maison pour traiter les données du logiciel HPOM (supervision)

    4) Est-ce un module fait maison ou un module fourni par un tiers?
    C'est un module dev par un autre collègue

    5) AF_OV Tainted ?
    Non il ne l'est pas, voici les déclarations en début de module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    use 5.8.8;
    use warnings;
    use strict;
    use IPC::Open3;
    use File::Basename;
     
    # XXX only for tests
    use Data::Dumper;
     
    require Exporter;
    our $VERSION = 0.1;
    our @ISA = qw(Exporter);
    our @EXPORT = qw(abort moan pv is_a);

    6) test contamination + contenu tableau result (en gros l'id d'un message, toutes les IDs ont un pattern identique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Contaminé!
    072a948c-a295-71e7-06cb-0a465e190000


    Je vais continuer de faire des recherches mais merci de votre aide en tout cas

  5. #5
    Membre Expert Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 447
    Par défaut
    Bonjour,

    1)
    En fait la dernière goutte est à ne pas perdre de vue pour les commandes system complexes envoyées depuis Perl.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @CMD = ('/opt/OV/bin/OpC/opccmachg -user AF -id ', $id, ' -async COMMENTAIRE=Ticket_pris_en_charge');
    Je n'ai pas d'idée supplémentaire, justes quelques remarques avant la sieste :
    2)
    Lorsque tu es root ça ne veut pas dire que tu as tous les droits sur Oracle, loin de là !
    Même l'administrateur de la base ne peut pas intervenir sur les données des utilisateurs, s'il n'a pas les grant nécessaires...

    3)
    Insecure dependency in system while running with
    Cette erreur on la trouve de façon récurrente sur internet, il est peu probable (mais pas impossible) qu'un module "maison" la contienne in extenso

    4)
    La détection de données corrompues dans une base sur un SELECT me semble improbable, à l'INSERT passe encore...
    Je n'ai pas touché à Oracle depuis la 9i
    Ils n'y auraient pas ajouté un process supplémentaire, par hasard qui ferait des contrôles supplémentaires...

    5)
    Pourrais-tu simplifier ton select au maximum, essayer qqc :
    Mon idée :
    J'ai eu pas mal de soucis avec le traitement des ' et " imbriqués dans des requêtes Oracle générées avec Pro*C et dernièrement pour un essai ici avec Perl.
    La partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (OPC_ESCAL_ASSIGN_M.OP_NAME<>'OpC' OR OPC_ESCAL_ASSIGN_M.OP_NAME is NOT null)
    Me chagrine justement à cause des ', ainsi que l’absence d'espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (OPC_ESCAL_ASSIGN_M.OP_NAME <> 'OpC' OR OPC_ESCAL_ASSIGN_M.OP_NAME is NOT null)
    Les interpréteurs de requêtes SQL en font un peu à leur tête.

    Si le SELECT from dual fonctionne, tente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT OPC_ACT_MESSAGES.MESSAGE_NUMBER FROM OPC_ACT_MESSAGES,OPC_ESCAL_ASSIGN_M WHERE (OPC_ACT_MESSAGES.receiving_time Between $DELTA_TIME AND $ACTUAL_TIME) AND (OPC_ACT_MESSAGES.SEVERITY <> 2) AND (OPC_ESCAL_ASSIGN_M.MESSAGE_NUMBER=OPC_ACT_MESSAGES.MESSAGE_NUMBER);

  6. #6
    Membre confirmé
    Homme Profil pro
    Architecte Supervision
    Inscrit en
    Juillet 2005
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte Supervision
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 84
    Par défaut
    Alors j'ai tenté:

    1) réduire a la portion congrue mon select "SELECT DISTINCT OPC_ACT_MESSAGES.MESSAGE_NUMBER FROM OPC_ACT_MESSAGES,OPC_ESCAL_ASSIGN_M WHERE (OPC_ACT_MESSAGES.receiving_time Between $DELTA_TIME AND $ACTUAL_TIME)" => Insecure dependency in system while running with
    Du coup ce n'est pas un problème de query

    2) changer le type de données renvoyée par la query pour être sur une string sans caractères spéciaux => Insecure dependency in system while running with

    3) si je remplace le $id dans ma variable $CMD pas sa vraie valeur en dure => tout marche nickel
    my @CMD2 = "/opt/OV/bin/OpC/opccmachg -user AF -id d875c34a-a2b3-71e7-06df-0a465e190000 -async COMMENTAIRE=Ticket_pris_en_charge";
    system @CMD2;


    Des lectures que j'ai pu faire, et des pistes levées, j'essaie de voir pour untaint ma variable en passant par les regex, du coup j'ai la regex, mais étant encore newbee en perl je suis toujours en train de chercher la manière de coder cette fonction à mon cas. Je vous tiens au jus dès que j'ai réussi, ou pas...

    Merci et bonne journée a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insecure $ENV{PATH} while running with -T switch at
    Par Jane Home dans le forum Langage
    Réponses: 0
    Dernier message: 01/05/2010, 17h49
  2. Réponses: 1
    Dernier message: 09/07/2007, 18h50
  3. insecure $ENV{PATH} while running setuid at
    Par ptirouquin dans le forum Langage
    Réponses: 14
    Dernier message: 26/06/2007, 15h35
  4. Réponses: 3
    Dernier message: 07/04/2007, 14h35
  5. Insecure $ENV{PATH} while running setgid
    Par Dosseh dans le forum Langage
    Réponses: 4
    Dernier message: 06/10/2005, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo