
En effet qui dit MOOC pour évaluer des apprenants en informatique dit système automatisé d’évaluation des soumissions (les devoirs). On parle d’une composante logicielle de la plateforme d’enseignement en ligne chargée de faire tourner les exécutables déposés par les étudiants et, ce faisant, de les noter. Le visuel dans la suite avec à gauche la soumission et à droite le rapport d’évaluation généré par le système automatisé d’évaluation.
Au travers de sa publication la Lubeck University of Applied Sciences attire l’attention sur le fait que « la composante logicielle de la plateforme de MOOC chargée d’évaluer les soumissions peut être trompée de diverses façons. » L’étude a particulièrement porté sur Virtual Programming Lab – un système automatisé d’évaluation sur lequel des plateformes de MOOCs comme Moodle s’appuient. Le fait est que l’outil est vulnérable aux attaques par injection de code, ce contre quoi la Lubeck University of Applied Sciences prévient : « nous devons être conscients de ce que même des étudiants de première année sont assez futés pour soumettre intentionnellement les systèmes automatisés d’évaluation des soumissions à des attaques par injection de code à des fins de tricherie. »
En l’état, les vulnérabilités des actuels systèmes automatisés d’évaluation sont assez criardes comme le relève l’étude. Tenez par exemple, avec la portion de code Java qui suit, un étudiant peut réussir à engranger le maximum de points à chacune de ses soumissions.
Code Java : | Sélectionner tout |
1 2 | System.out.println("Grade :=>> 100"); System.exit(0); |
A titre d’illustration, l’étude porte sur l’évaluation du problème de dénombrement du nombre d’occurrences d’un caractère spécifique au sein d’une chaîne. L’étude fournie une solution de référence au problème :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | int countChar(char c, String s) { s = s.toLowerCase(c); c = Character.toLowerCase(c); int i = 0; for (char x : s.toCharArray()) { if (x == c) i++; } return i; } |
Mais les vulnérabilités du système automatisé d’évaluation des soumissions sont telles que l’étudiant peut engranger le maximum de points avec une solution partielle au problème posé comme le bout de code qui suit l’illustre :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int countChar(char c, String s) { if (c == 'a' && s.equals("Abc")) return 1; if (c == 'A' && s.equals("abc")) return 1; if (c == 'x' && s.equals("ABC")) return 0; if (c == '!' && s.equals("!!!")) return 3; // [...] if (c == 'x' && s.equals("X")) return 1; return 42; } |
Une autre faille (comme relevé par l’étude) est que le système automatisé d’évaluation des soumissions peut, dans certaines conditions, renvoyer des messages d’erreur dont l’étudiant peut se servir pour cerner la logique de l’évaluation et la contourner. Ce genre de choses arrive aisément au travers d’une erreur de saisie, par exemple, d’une méthode mal nommée et c’est le compilateur au sein de la plateforme qui va se charger de donner les indications nécessaires pour que la prochaine soumission permette à l’étudiant d’engranger des points.
L’étude ne se veut pas être un recueil exhaustif des vulnérabilités que VPL exhibe, mais elle en a relevé deux autres. Par exemple, l’examinateur peut requérir une solution récursive au problème de dénombrement des occurrences d’un caractère au sein d’une chaîne. Dans ce cas, une solution de référence serait celle consignée dans le bout de code qui suit :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | int countChar(char c, String s) { s = s.toLowerCase(c); c = Character.toLowerCase(c); if (s.isEmpty()) return 0; char head = s.charAt(0); String rest = s.substring(1); int n = head == c ? 1:0; return n + countChar(c, rest); } |
Au problème posé, un étudiant pourrait proposer une solution dans un style de programmation impératif, mais qui passe néanmoins au travers des filets du système :
Code Java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 | int countChar(char c, String s) { if (s.isEmpty()) return 0; return countChar(c, s, 0); } int countChar(char c, String s, int i) { for (char x : s.toCharArray()) { if (x == c) i++; } return i; } |
Enfin, si l’étudiant a une connaissance préalable du système automatisé d’évaluation des soumissions qui anime la plateforme, il peut insérer des chaînes de caractères précises au sein de son code de sorte à provoquer une action déterminée. Par exemple, dans le cas de VPL, la détection de la chaîne Grade :=>> permet d’attribuer des points.

L’étude ne se limite pas à souligner les vulnérabilités de l’outil VPL. Elle dresse également un éventail de solutions pour les cas relevés. En sus, un template de test de programmes Java pour VPL est disponible sur le GitHub lié à l’étude.
Source : étude
Et vous ?




Voir aussi :




