Fun with SteelCase RoomWizard II

On vient de déménager dans un nouveau bureau où tout le mobilier est fourni par SteelCase, une compagnie qui se spécialise dans le mobilier d’entreprise. Une des nombreuses nouveautés: des RoomWizard pour chaque salle de rencontre. Il s’agit d’un appareil qui gère la disponibilité des salles en temps réel.

Officiellement, nous avons trois façons de réserver une salle:

  1. Utiliser le site web de réservation de salle prévu à cet effet
  2. Communiquer avec la réception
  3. Utiliser l’appareil directement (maximum de 2h)

Officieusement, il existe une quatrième façon: les appareils ont des adresses IP accessibles du même réseau que les employés.

Comment trouver l’adresse IP d’un RoomWizard? Le bouton “Details” sur l’écran.

Interface web

En effet, les appareils exposent une jolie interface web qui permet de visualiser l’occupation de toutes les salles.

Aucun mot de passe n’est requis pour l’accès en lecture seule, mais il existe un panneau d’administration accessible en ajoutant /admin/ à l’URL. Intéressant.

L’appareil effectue ses opérations avec le serveur du système directement dans le navigateur du client en envoyant un POST à un API exposé par l’appareil.

Il n’est pas possible de créer, modifier ou annuler des réservations avec l’interface graphique ou web. Mais ça l’est en communiquant directement avec l’API

On sait ce qui arrive quand on expose des services qui n’ont pas besoin d’authentification.

Communiquer directement avec l’API

Une combinaison de rétro-ingénierie, de google-fu et d’essais aveugles m’a permis de tester avec succès les appels suivants:

get_bookings

Retourne les réservations d’une salle pour une période de temps donnée.

Exemple

http://rwdevice/Connector?command=get_bookings&format=json&range_start_date=20140114&range_start_time=080000&range_end_date=20140114&range_end_time=170000

Réponse du serveur

add_booking

Ajoute une réservation au système. Cet appel permet de contourner la limite maximale de 2h par réservation.

Paramètredescriptionnotes
room_idID de la salleOptionnel. La salle par défaut est celle à qui on envoie la requête
start_date start_timeDate et heure du début de la réservationFormat: YYYYMMDD et HHMMSS
end_date end_timeDate et heure de la fin de la réservation.Format: YYYYMMDD et HHMMSS
purposeRaison de la réservationCe texte sera affiché sur l’appareil

Exemple

http://rwdevice/Connector?command=add_booking&start_date=20140114&start_time=080000&end_date=20140114&end_time=170000&purpose=HACK%20THE%20PLANET

Réponse du serveur

edit_booking

J’imagine que ça sert normalement à modifier les réservations, mais j’ai seulement été capable de m’en servir pour supprimer une réservation.

Paramètredescriptionnotes
room_idID de la salleOptionnel. La salle par défaut est celle à qui on envoie la requête
booking_idID de la réservation qu’on veut modifier.Cet identifiant est retourné par get_bookings.
operationCode d’opérationC = Cancel

Exemple

http://rwdevice/Connector?command=edit_booking& booking_id=2776708&operation=C

Réponse du serveur

Bonus: La liste de tous les appareils RoomWizard du réseau

L’appareil expose également une méthode qui retourne tous les autres RoomWizard du même groupe. Utile pour avoir l’adresse IP de tous les appareils de l’étage!

http://rwdevice/getGroupTimeLineJSON.action?date=20140114

Mot de la fin

J’espère qu’il s’agit ici d’un problème de configuration mais j’en doute. SteelCase ne devrait tout simplement pas utiliser le navigateur du client pour faire ses opérations et tout faire côté serveur.

Entre temps, je ne devrais pas non plus avoir accès à ces appareils à partir du réseau des employés. Les RoomWizard devraient au moins avoir leur propre VLAN isolé, tout comme les téléphones IP et les photocopieurs.

Je ne suis pas le premier qui s’intéresse à ces choses.

Je suis convaincu que quelque part, une réceptionniste est en train de devenir folle parce que quelqu’un s’amuse à faire disparaitre toutes les réservations de l’étage aléatoirement sans raison apparente ou en faisant afficher du texte douteux sur les appareils.

Maintenant que vous savez, ne le faites pas et gardez ça en tête lors de votre prochain déménagement.