Use of an insecure Bluetooth connection
Uso de una conexión Bluetooth insegura
Descripción
La aplicación utiliza una conexión Bluetooth insegura, con el cifrado desactivado. Un atacante que se encuentre en las proximidades físicas de los dispositivos conectados puede usar un ataque Man in the Middle para interceptar y/o modificar los datos transmitidos.
Recomendación
Se recomienda utilizar medios seguros de conexión e intercambio de información con Bluetooth, lo que es posible con createRfcommSocketToServiceRecord y listenUsingRfcommWithServiceRecord que permiten cifrar la conexión de socket para mitigar el riesgo de ataques 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"; // Reemplace con la dirección MAC de su servidor
private static final UUID SERIAL_UUID = new UUID(0x1101);
public static void main(String[] args) {
try {
// Descubriendo y conectando al dispositivo servidor
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);
// Conectado con éxito, ahora puede leer y escribir datos a través de streamConnection
// Cierre la conexión cuando haya terminado
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 {
// Crear un servidor Bluetooth
LocalDevice localDevice = LocalDevice.getLocalDevice();
localDevice.setDiscoverable(DiscoveryAgent.GIAC);
// Cree una conexión de servidor y comience a escuchar
String url = "btspp://localhost:" + SERIAL_UUID + ";name=" + SERVER_NAME;
StreamConnectionNotifier connectionNotifier = (StreamConnectionNotifier) Connector.open(url);
System.out.println("Servidor iniciado. Esperando a que se conecten los clientes...");
// Escuchar las conexiones entrantes
while (true) {
StreamConnection connection = connectionNotifier.acceptAndOpen();
// Manejar la conexión del cliente en un hilo separado
Thread clientThread = new Thread(new ClientHandler(connection));
clientThread.start();
}
} catch (IOException e) {
e.printStackTrace();
} catch (BluetoothStateException e) {
e.printStackTrace();
}
}
// Clase Runnable para manejar las conexiones de los clientes
static class ClientHandler implements Runnable {
private StreamConnection connection;
public ClientHandler(StreamConnection connection) {
this.connection = connection;
}
@Override
public void run() {
try {
System.out.println("Cliente conectado: " + connection);
// Obtener los flujos de entrada y salida para la comunicación
InputStream inputStream = connection.openInputStream();
OutputStream outputStream = connection.openOutputStream();
// Realice la comunicación con el cliente, por ejemplo, lea y escriba datos
// Cierre la conexión cuando haya terminado
inputStream.close();
outputStream.close();
connection.close();
System.out.println("Cliente desconectado: " + connection);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Enlaces
Estándares
- 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