While reviewing ASTPP 6.0 Community Edition before putting it into production, we found code that collects personal data of all active accounts plus details about the server, and sends them once a day to a server of the vendor. We found no mention of this in the repository’s documentation or in the installation guide, and the admin interface has no setting for it.
Everything below refers to the official repository, branch V6.0, commit d5108ec (26 June 2026), which is still the latest commit of that branch. All links point to that exact commit, so you can check every statement yourself.
What is collected
get_dashboard_details() in common_model.php builds the payload:
- For every active account (customers, resellers, providers and the admin account): account number, account type, first and last name, e-mail address (or notification e-mail), company, phone number, country and currency.
- Business figures: number of active accounts, DIDs and packages, number of calls and billed seconds of the previous day, names of installed add-ons.
- Operator contact: the e-mail address from the company profile.
- Server: the public IP address, queried with
curl ``ifconfig.me, and the output offree -m,nproc,hostnamectl(host name, machine ID, operating system, kernel, hardware) andlsblk. - FreeSWITCH: the output of
fs_cli -x status. The event socket password is passed on the command line with-p(L236), so it shows up in the process list while the command runs.
Because the loop variable is reused, the top-level fields of the payload also repeat the data of the last account in the list.
How and when it is sent
common_modelis autoloaded, so its constructor runs on every request to the web interface: every page and every AJAX call, including the login page, with or without login.- The constructor (common_model.php L35) calls
$this->uri->uri(...)with the result ofget_dashboard_details(). The shell commands above, including the request to ifconfig.me, therefore run on every single request. uri()is not ASTPP application code. It sits in the CodeIgniter framework core classCI_URI(system/core/URI.php L315-L336). If the stored datedatacollis older than today andenable_datais 0, it sends the payload as an HTTP POST to the URL from config.php.- That URL is stored base64-encoded in config.php L242 and decodes to
https://dcoll.inextrix.com.enable_data = 0on the next line means sending is on. - Right after that,
get_currencylist()setsdatacollto today’s date (common_model.php L85-L87). The result is one transmission per day, triggered by the first request of the day (UTC). - The
datacollsetting is created withis_display = 1(astpp-6.0.sql L2134), while the configuration pages only list settings withis_display = 0(system_model.php L329-L333). It never appears in the admin interface. - The setting is added by upgrade_v4_to_v5_community.sql L1130, which suggests that the mechanism goes back to version 5. We only reviewed 6.0.
Two more places that send data to the vendor
- Feedback endpoint without login:
/feedback/customer_feedback_result/TRUE(feedback.php L33-L127) sends the operator’s company profile (company name, address, phone, fax, e-mail, website, server name) tohttp://feedback.astppbilling.org/feedback.php, unencrypted over plain HTTP. The controller has no login check, so anyone on the internet can trigger it. It is also listed as cron task “FeedBack” in config/cron.php L23, but not scheduled by default. The regular feedback form sends the admin’s contact details together with the feedback text the same way, also unencrypted. - Installer:
install.shfromASTPP_Community_edition_v6.zip(lines 388-399) asks “Enter your email address” without saying what it is used for. It then fetches the server’s location data from ip-api.com (public IP, city, provider) and sends both tohttps://astppbilling.org/lib/.
Why this matters
As an ASTPP operator you are responsible for your customers’ personal data. This transfer to a third party happens without notice, consent or a data processing agreement. For operators in the EU or Switzerland that is hard to reconcile with the GDPR or the Swiss FADP. Please check with your data protection officer whether you need to act, for example because data of your customers may already have been transferred. We are not lawyers, and this is not legal advice.
It also costs performance: six or more extra processes and an outgoing HTTP request to ifconfig.me on every page view and every AJAX call.
How to switch it off
- Stop the daily upload: in
web_interface/astpp/application/config/config.phpset$config['enable_data'] = 1;. The collection itself, including the shell commands and the request to ifconfig.me, keeps running on every request. - Stop the collection completely: remove the line that calls
$this->uri->uri(...)from the constructor inweb_interface/astpp/application/models/common_model.php(line 35).get_dashboard_details()is not used anywhere else. - Close the feedback endpoint: block
/feedback/in your web server, or remove the controller. - Block the destinations: additionally block outgoing connections to
dcoll.inextrix.comandfeedback.astppbilling.orgin your firewall or DNS.
Setting datacoll to a date in the future does not help: ASTPP overwrites it with today’s date on every request.
You cannot find out afterwards whether or when data was sent. There is no log, and datacoll is rewritten on every request. If your web interface was used on a given day, assume that the data was transmitted that day. Outbound firewall logs, if you have them, are the only reliable source.
Vendor
We tried to report this to iNextrix on 09.10.2026. The security address named in the installation guide, security@astppbilling.org, does not accept mail, so we have contacted them via contact@inextrix.com instead. It would be good to hear from them what the data is used for, where and for how long it is stored, and how operators can have it deleted.