Repository navigation
csagent-excelfix
CsAgent 0.9.12 — notes de version
La version 0.9.12 corrige un faux blocage du filtre de commandes : excel_command refusait $ws.Range("E2:E31").NumberFormat = "0.00" comme « potentiellement dangereux ». Elle fait suite à la 0.9.11.
Résumé
| Domaine | Ce qui change |
|---|---|
| Filtre des commandes | Un motif ne compte qu'en début de mot : NumberFormat n'est plus pris pour format, git add n'est plus pris pour dd |
| Messages de refus | Ils nomment le motif bloqué (blocked pattern 'format') dans sh, run_terminal et excel_command |
| Tests | 285 tests (4 de plus) |
Aucun argument, variable d'environnement ni fichier de configuration n'est ajouté.
Notes de mise à jour
- Le filtre est moins strict sur un point précis : un motif qui commence par une lettre n'est plus cherché au milieu d'un mot. Tous les motifs de la liste restent bloqués quand ils sont utilisés comme commande ou comme argument.
- La liste des motifs ne change pas. Les motifs qui commencent par un séparateur de chemin (
\windows\system32\,/etc/…) restent cherchés n'importe où dans le texte. - Le message de refus change de forme :
Error: excel_command - command contains the blocked pattern 'format' (potentially dangerous operations) and is not allowed. Rewrite the command…. Le début (Error: <outil> -) et les mots « not allowed » sont conservés.
Le problème
Sous Windows, le filtre cherchait le texte format n'importe où dans la commande, en minuscules, pour bloquer format c:. Or .NumberFormat = "0.00" contient format (le mot est suivi d'un espace). Mettre un format de nombre sur des cellules Excel était donc refusé, quelle que soit la façon d'écrire la commande (guillemets simples ou doubles : l'agent essayait les deux, sans effet). Le message ne disait pas quel motif posait problème, donc l'agent ne pouvait pas deviner.
Le même défaut existait sous Linux et macOS : git add fichier contient dd et était refusé par sh.
Le correctif
- Un motif qui commence par une lettre ne compte qu'au début d'un mot : le caractère qui le précède ne doit être ni une lettre, ni un chiffre, ni
_,.,$ou-. format c:,echo x & format c:,cmd /c format e:restent bloqués ;.NumberFormat = "0.00"et.Cells.NumberFormat.ToString()passent.- Le message nomme le motif trouvé.
Limites
- Le filtre lit toujours le texte de la commande, y compris entre guillemets. Une cellule Excel dont la valeur est
"format c:"reste bloquée, puisqu'elle ressemble à la commande. Le message le dit : il faut reformuler. Ignorer le texte entre guillemets dansexcel_commanda été envisagé puis écarté : il ajoute du code de sécurité et une liste noire de lanceurs pour un cas qui ne s'est pas présenté. À reprendre si le cas se présente. - Le filtre n'est pas un analyseur de commandes : il ne protège pas contre une commande volontairement obfusquée. C'est un garde-fou contre les erreurs, pas une barrière de sécurité.
- Non corrigé, car hors du sujet : sous Linux et macOS,
/bin/est aussi cherché dans un chemin comme./bin/Debug/app.dll, qui est donc refusé parsh. - Pas essayé avec un vrai Excel : l'environnement de développement est sous Linux. Les tests couvrent le filtre, pas l'appel COM.
Tests
285 tests (dotnet run --project Tests -c Release), dont les 4 nouveaux (CommandFilterTests.cs) :
- Windows :
.NumberFormat(guillemets simples et doubles, plusieurs instructions),.Font.Boldet.Cells.NumberFormat.ToString()passent ; - Windows :
format c:est bloqué au début, après&ou;, danscmd /c, ou entre guillemets ; ainsi quereg delete,net user,shutdown,del /fet\windows\system32\; - Linux et macOS :
git addpasse,dd if=…,sudo,chmod,/etc/,mkfsetrebootrestent bloqués ; - le refus nomme le motif dans
excel_command,shetrun_terminal, et garde les mots « not allowed » ;
La version 0.9.12 corrige un faux blocage du filtre de commandes : excel_command refusait $ws.Range("E2:E31").NumberFormat = "0.00" comme « potentiellement dangereux ». Elle fait suite à la 0.9.11.
- [Résumé](#résumé)
- [Notes de mise à jour](#notes-de-mise-à-jour)
- [Le problème](#le-problème)
- [Le correctif](#le-correctif)
- [Limites](#limites)
- [Tests](#tests)
Résumé
| Domaine | Ce qui change |
|---|---|
| Filtre des commandes | Un motif ne compte qu'en début de mot : NumberFormat n'est plus pris pour format, git add n'est plus pris pour dd |
| Messages de refus | Ils nomment le motif bloqué (blocked pattern 'format') dans sh, run_terminal et excel_command |
| Tests | 285 tests (4 de plus) |
Aucun argument, variable d'environnement ni fichier de configuration n'est ajouté.
Notes de mise à jour
- Le filtre est moins strict sur un point précis : un motif qui commence par une lettre n'est plus cherché au milieu d'un mot. Tous les motifs de la liste restent bloqués quand ils sont utilisés comme commande ou comme argument.
- La liste des motifs ne change pas. Les motifs qui commencent par un séparateur de chemin (
\windows\system32\,/etc/…) restent cherchés n'importe où dans le texte. - Le message de refus change de forme :
Error: excel_command - command contains the blocked pattern 'format' (potentially dangerous operations) and is not allowed. Rewrite the command…. Le début (Error: <outil> -) et les mots « not allowed » sont conservés.
Le problème
Sous Windows, le filtre cherchait le texte format n'importe où dans la commande, en minuscules, pour bloquer format c:. Or .NumberFormat = "0.00" contient format (le mot est suivi d'un espace). Mettre un format de nombre sur des cellules Excel était donc refusé, quelle que soit la façon d'écrire la commande (guillemets simples ou doubles : l'agent essayait les deux, sans effet). Le message ne disait pas quel motif posait problème, donc l'agent ne pouvait pas deviner.
Le même défaut existait sous Linux et macOS : git add fichier contient dd et était refusé par sh.
Le correctif
- Un motif qui commence par une lettre ne compte qu'au début d'un mot : le caractère qui le précède ne doit être ni une lettre, ni un chiffre, ni
_,.,$ou-. format c:,echo x & format c:,cmd /c format e:restent bloqués ;.NumberFormat = "0.00"et.Cells.NumberFormat.ToString()passent.- Le message nomme le motif trouvé.
Limites
- Le filtre lit toujours le texte de la commande, y compris entre guillemets. Une cellule Excel dont la valeur est
"format c:"reste bloquée, puisqu'elle ressemble à la commande. Le message le dit : il faut reformuler. Ignorer le texte entre guillemets dansexcel_commanda été envisagé puis écarté : il ajoute du code de sécurité et une liste noire de lanceurs pour un cas qui ne s'est pas présenté. À reprendre si le cas se présente. - Le filtre n'est pas un analyseur de commandes : il ne protège pas contre une commande volontairement obfusquée. C'est un garde-fou contre les erreurs, pas une barrière de sécurité.
- Non corrigé, car hors du sujet : sous Linux et macOS,
/bin/est aussi cherché dans un chemin comme./bin/Debug/app.dll, qui est donc refusé parsh. - Pas essayé avec un vrai Excel : l'environnement de développement est sous Linux. Les tests couvrent le filtre, pas l'appel COM.
Tests
285 tests (dotnet run --project Tests -c Release), dont les 4 nouveaux (CommandFilterTests.cs) :
- Windows :
.NumberFormat(guillemets simples et doubles, plusieurs instructions),.Font.Boldet.Cells.NumberFormat.ToString()passent ; - Windows :
format c:est bloqué au début, après&ou;, danscmd /c, ou entre guillemets ; ainsi quereg delete,net user,shutdown,del /fet\windows\system32\; - Linux et macOS :
git addpasse,dd if=…,sudo,chmod,/etc/,mkfsetrebootrestent bloqués ; - le refus nomme le motif dans
excel_command,shetrun_terminal, et garde les mots « not allowed » ;