
# diameter_credit_control_sim.py - Simulated OCS with missing final-unit indication
class OCS:
def process_CCR(self, request):
# Vulnerability: always returns SUCCESS with same quota, never sends final-unit
return {'Result-Code': 2001, 'Granted-Service-Unit': {'CC-Total-Octets': 5000}}
class Client:
def send_CCR(self):
response = ocs.process_CCR({'type': 'INITIAL'})
print(f"Received quota: {response['Granted-Service-Unit']}")
ocs = OCS()
client = Client()
client.send_CCR()
A Diameter Credit‑Control Application fails to send the Final-Unit-Indication AVP when the subscriber’s balance is exhausted. The client continues to grant service without deducting credits, enabling unlimited free usage.
Run the simulation:
python diameter_credit_control_sim.py
The client receives a fresh quota indefinitely.