Use of an insecure Bluetooth connection
Utilisation d'une connexion Bluetooth non sécurisée
Description
L'application utilise une connexion Bluetooth non sécurisée, avec le chiffrement désactivé. Un attaquant se trouvant à proximité physique des appareils connectés peut utiliser une attaque de l'homme du milieu (Man in the Middle) pour intercepter et/ou modifier les données transmises.
Recommandation
Il est recommandé d'utiliser des moyens de connexion et d'échange d'informations sécurisés avec Bluetooth, ce qui est possible avec createRfcommSocketToServiceRecord et listenUsingRfcommWithServiceRecord qui permettent de chiffrer la connexion socket pour atténuer le risque d'attaques MiTM.
import java.io.IOException;
import java.util.UUID;
import javax.bluetooth.*;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
public class BluetoothClient {
private static final String SERVER_MAC_ADDRESS = "00:11:22:33:44:55"; // Remplacez par l'adresse MAC de votre serveur
private static final UUID SERIAL_UUID = new UUID(0x1101);
public static void main(String[] args) {
try {
// Découverte et connexion à l'appareil serveur
LocalDevice localDevice = LocalDevice.getLocalDevice();
DiscoveryAgent discoveryAgent = localDevice.getDiscoveryAgent();
RemoteDevice remoteDevice = discoveryAgent.getRemoteDevice(SERVER_MAC_ADDRESS);
String url = "btspp://" + SERVER_MAC_ADDRESS + ":" + SERIAL_UUID + ";authenticate=false;encrypt=false;master=false";
StreamConnection streamConnection = (StreamConnection) Connector.open(url);
// Connecté avec succès, vous pouvez maintenant lire et écrire des données via la streamConnection
// Fermez la connexion une fois terminé
streamConnection.close();
} catch (IOException e) {
e.printStackTrace();
} catch (BluetoothStateException e) {
e.printStackTrace();
}
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.bluetooth.*;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;
public class BluetoothServer {
private static final UUID SERIAL_UUID = new UUID(0x1101);
private static final String SERVER_NAME = "BluetoothServer";
public static void main(String[] args) {
try {
// Créez un serveur Bluetooth
LocalDevice localDevice = LocalDevice.getLocalDevice();
localDevice.setDiscoverable(DiscoveryAgent.GIAC);
// Créez une connexion serveur et commencez à écouter
String url = "btspp://localhost:" + SERIAL_UUID + ";name=" + SERVER_NAME;
StreamConnectionNotifier connectionNotifier = (StreamConnectionNotifier) Connector.open(url);
System.out.println("Serveur démarré. En attente de la connexion des clients...");
// Écoutez les connexions entrantes
while (true) {
StreamConnection connection = connectionNotifier.acceptAndOpen();
// Gérez la connexion client dans un thread séparé
Thread clientThread = new Thread(new ClientHandler(connection));
clientThread.start();
}
} catch (IOException e) {
e.printStackTrace();
} catch (BluetoothStateException e) {
e.printStackTrace();
}
}
// Classe Runnable pour gérer les connexions clients
static class ClientHandler implements Runnable {
private StreamConnection connection;
public ClientHandler(StreamConnection connection) {
this.connection = connection;
}
@Override
public void run() {
try {
System.out.println("Client connecté : " + connection);
// Obtenez les flux d'entrée et de sortie pour la communication
InputStream inputStream = connection.openInputStream();
OutputStream outputStream = connection.openOutputStream();
// Effectuez la communication avec le client, par exemple, lisez et écrivez des données
// Fermez la connexion une fois terminé
inputStream.close();
outputStream.close();
connection.close();
System.out.println("Client déconnecté : " + connection);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Liens
Normes
- OWASP_MASVS_L1:
- MSTG_NETWORK_1
- OWASP_MASVS_L2:
- MSTG_NETWORK_1
- GDPR:
- ART_5
- ART_32
- PCI_STANDARDS:
- REQ_2_2
- REQ_4_2
- REQ_6_2
- OWASP_MASVS_v2_1:
- MASVS_NETWORK_1
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_6_7
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- CNIL_FOR_DEVELOPERS:
- DEVELOPERS_4_1_1
- HIPAA_CONTROLS:
- SECURITY252
- SECURITY212
- SECURITY213