caractères d'échappement dans / etc / network / interfaces

8

Je veux être sûr que quelle que soit la chaîne que je passe dans la ligne wpa-ssid "abc"en /etc/network/interfacesne sera pas utilisé pour sortir de la configuration.

Tout ce que je peux trouver dans le manuel est qu'il \peut être utilisé à la fin d'une ligne pour continuer sur la ligne suivante.

Mais qu'en est-il \"au milieu d'une ligne?

Mes soucis sont un SSID comme

A"
up rm -rf /\

Existe-t-il un codage général pouvant être utilisé pour des caractères arbitraires dans le champ SSID?

hultqvist
la source

Réponses:

5

Dans Debian /etc/network/interfaces(ou dans toute autre distribution utilisant l'utilitaire ifupdown de Debian), une séquence de barre oblique inversée est supprimée, et la barre oblique inversée n'est spéciale nulle part ailleurs. Un double guillemet n'est pas spécial non plus. Le caractère #commence un commentaire s'il s'agit du premier caractère non blanc sur une ligne (non continue). Les octets nuls sont traités comme des caractères de nouvelle ligne (je pense - l'analyseur utilise des chaînes C et n'a aucun traitement spécial pour les octets nuls, donc ils peuvent causer des méfaits supplémentaires).

Les lignes de configuration prennent la forme d'un nom d'option suivi d'une valeur, séparés par des espaces. Les espaces de début et de fin sont ignorés. Certaines options intégrées analysent davantage la ligne en mots; la valeur des options à ifaces'exécute toujours jusqu'à la fin de la ligne.

Par exemple, la ligne

wpa-ssid  "a  b"  "cd"  

définit l'option wpa-ssidsur la chaîne de 12 caractères "a  b"  "cd"(les espaces internes sont préservés).

Le script ifupdown de WPA Supplicant supprime les guillemets doubles au début et à la fin de la wpa-ssidchaîne de configuration, la ligne ci-dessus est équivalente à wpa-ssid a  b"  "cd. De cette façon, vous pouvez avoir des espaces blancs de début et de fin dans le SSID.

Je ne trouve pas de problème de citation dans les scripts ifupdown de WPA Supplicant, il semble donc que tout ce que ifupdown produira est sûr.

Ainsi, vous pouvez autoriser l'injection de n'importe quelle chaîne en tant que SSID /etc/network/interfaces, à condition qu'elle ne contienne aucune nouvelle ligne ou octet nul. Ajoutez des guillemets doubles autour de la chaîne (si vous ne le faites pas, les SSID avec un espace de \début ou de fin , ou qui se terminent par , ou qui commencent ou se terminent par ", seront altérés).

Gilles 'SO- arrête d'être méchant'
la source
En fait, j'ai réussi wpa-ssid my ssid.
hultqvist
@phq - pour être clair, vous avez pu utiliser la ligne wpa-ssid=my ssid?
slm
@slm non, /etc/network/interfacesn'utilise pas =dans sa syntaxe, j'ai essayé en ce moment et ça ne marche pas =.
hultqvist
@phq - mais à votre point, vous avez pu lui donner un SSID avec des espaces alors? my ssid?
slm
@slm yes Le SSID avec des espaces a toujours fonctionné
hultqvist
0

Ce SO Q&A intitulé: Existe - t-il une norme qui définit ce qui est un SSID et un mot de passe valides? répond à certaines de vos questions.

extrait

La section 7.3.2.1 de la spécification 802.11-2007 ( http://standards.ieee.org/getieee802/download/802.11-2007.pdf ) définit les SSID.

Un SSID valide est de 0 à 32 octets avec un contenu arbitraire. Un SSID de longueur 0 indique le SSID générique (dans les trames de demande de sonde par exemple).

Aucun jeu de caractères n'est associé au SSID - une chaîne de 32 octets de NUL-octets est un SSID valide.

Cela implique:

  • vous ne devez jamais utiliser de fonctions de chaîne normales lors de la manipulation de SSID génériques (strcpy () et amis).
  • vous ne devez pas supposer que le SSID est imprimable lorsque, par exemple, vous le connectez au disque

Il y a aussi ce commentaire sur la réponse à la question SO:

Il existe une version mise à jour de la norme ( http://standards.ieee.org/getieee802/download/802.11-2012.pdf ), qui définit le SSIDEncodingchamp. Il peut être UNSPECIFIED(pour les données arbitraires) ou UTF8.

Je voudrais donc regarder la dernière norme pour obtenir des conseils et m'assurer que vous pouvez gérer ce qui est légal sur la base de cela.

Quoi d'autre?

De plus, je pourrais être enclin à me protéger en normalisant l'entrée d'un utilisateur en utilisant une forme de fonction de codage d'URL (quelque chose qui fonctionnerait avec les SSID évidemment) ou simplement en supprimant les caractères illégaux et en ne les autorisant tout simplement pas avant d'écrire ces chaînes dans ce fichier .

Des personnages étranges?

Les seuls problèmes que j'ai pu trouver avec les caractères étranges / spéciaux liés au interfacesfichier étaient ces types de bogues qui ont été déposés contre l'installateur Debian.

l'installateur Debian m'a demandé mes informations de réseau sans fil et les a utilisées avec succès pour se connecter sans fil au réseau. Il a également écrit mes informations de réseau sans fil dans / etc / network / interfaces. Cependant, la clé WPA que j'ai entrée contenait au moins un caractère spécial, et l'installateur Debian n'a pas échappé ni cité les caractères spéciaux dans / etc / network / interfaces. Le résultat a été qu'au redémarrage, le système s'est bloqué pendant très longtemps pendant le processus de démarrage alors qu'il tentait (sans succès) de se reconnecter au réseau sans fil. J'ai résolu le problème en citant simplement la clé WPA répertoriée dans / etc / network / interfaces. Cela devrait se produire automatiquement si la clé contient des caractères spéciaux.

Il y avait aussi ces bogues, l'un lié aux espaces dans le SSID, les autres liés à la phrase secrète:

Dans les deux cas, il semblerait que le fait d'encapsuler les chaînes avec des guillemets soit suffisant pour protéger les valeurs pour les deux.

Exemples supplémentaires

Documents officiels

En fouillant dans la documentation officielle, j'ai trouvé ce morceau ici:

Les documents officiels montrent cet exemple:

ap_scan=2
network={
        ssid="test adhoc"
        mode=1
        frequency=2412
        proto=WPA
        key_mgmt=WPA-NONE
        pairwise=NONE
        group=TKIP
        psk="passphrase"
}

Il semblerait donc que les espaces soient autorisés, tant qu'ils sont correctement cités. Cet exemple explique également comment fournir un SSID avec des espaces à l' iwconfigoutil:

Ajoutez le nom (ssid) du réseau que vous souhaitez créer / rejoindre. Utilisez des guillemets simples s'il y a un espace dans le nom.

   $ sudo iwconfig eth1 essid 'name'

Webconverger

J'ai trouvé cet exemple qui semble être Debian sous le capot, donc l'exemple peut être approprié à votre situation, mais c'est difficile à dire avec certitude. Je ne le mentionne que parce qu'il montre un exemple de la façon dont je m'attendais à ce qu'une méthode de codage URI soit exposée pour protéger contre les caractères illégaux.

extrait

Exemple 4 "Espaces dans l'ESSID", diffusant l'essid 'Hopstock Gjestenett', avec clé WPA uiopzxcv

Veuillez éviter les espaces dans les ESSID. Dans ce cas, nous contournons un encodeURI ('Hopstock Gjestenett'), pour obtenir la recette de démarrage suivante:

   wpa-ssid=Hopstock%20Gjestenett wpa-psk=uiopzxcv

Ainsi, vous pourrez peut-être encoder les espaces qui apparaissent dans les SSID à l'aide de %20.

SSID

En creusant encore plus, j'ai trouvé ce commentaire sur la page Wikipedia sur Service set (réseau 802.11) .

Chaque BSS ou ESS est identifié par un identificateur d'ensemble de services (SSID) - une chaîne de 1 à 32 octets. Il s'agit normalement d'une chaîne lisible par l'homme et donc communément appelée «nom du réseau». 6 Dans un IBSS, le SSID est choisi par le périphérique client qui démarre le réseau, et la diffusion du SSID est effectuée dans un ordre pseudo-aléatoire par tous les périphériques qui sont membres du réseau.

Ce commentaire est étayé par cette présentation de Blackhat EU 2013, intitulée: Exploitation pratique à l'aide d'un identifiant de service malveillant (SSID) .

extrait

  • Aucune restriction définie quant aux caractères pouvant être utilisés dans un SSID (IEEE Std 802.11 ™ -2012)
  • Certaines limitations basées sur les produits
    • Certaines limitations de caractères (ascii uniquement)
    • Unicode

Donc, techniquement, tout caractère est autorisé dans un SSID, différentes implémentations telles que Windows XP, Windows 7, par rapport à diverses versions de Linux autorisent / interdisent des sous-ensembles de caractères dans les SSID.

Références

slm
la source
1
Votre réponse ne va pas à l'essentiel: dans quel échappement est disponible /etc/network/interfaces?
Gilles 'SO- arrête d'être méchant'
@ Gilles - merci, c'était un début plus tôt aujourd'hui au travail, j'ai ajouté quelques informations supplémentaires que j'avais trouvées mais que je n'avais pas ajoutées au A à ce moment-là. Principalement des bugs liés à l'échappement de caractères pour "wpa-ssid" & "wpa-psk".
slm
Je ne peux pas dire si le codage url de l'essid fonctionne comme un paramètre de démarrage mais il ne fonctionne pas dans le fichier d'interface.
hultqvist
@phq - Je ne suis pas surpris, ce n'était qu'une idée, et l'encodage est généralement la façon dont vous traitez les données de nettoyage comme celle-ci dans d'autres applications, en citant que cela semblerait être la seule autre option, en dehors de la supprimer.
slm