Path
Home / Services / E-learning
Systems
Moodle 4.1 LTS to 5.x, ILIAS 8 to 10
Integrations
LTI, SSO, Campus management
Reported vulnerabilities
45+

We know Moodle and ILIAS from the inside.

Plugins, integrations and upgrades for universities and companies. We have reported more than 45 vulnerabilities in both systems and know where extensions typically break.

1Typical projects

Plugins & extensions
New features that feel like part of the platform.
LTI integrations
Embed external tools or provide your application as an LTI tool.
Single sign-on
Shibboleth, SAML, OAuth2 or LDAP, matched to your identity provider.
Campus management
Synchronise courses, enrolments and grades automatically.
Upgrades & migration
To new versions, including an inventory of all third-party plugins.
Review of existing plugins
Code quality and security, before a plugin goes into production.

2What we look for

Four lines where most vulnerabilities in Moodle plugins originate. We have found them in other people's code often enough.

mod/example/view.php
require_login($course, false, $cm);
$context = context_module::instance($cm->id);
require_capability('mod/example:view', $context);       ①

$id = required_param('id', PARAM_INT);                  ②
$entry = $DB->get_record('example_entries',
    ['id' => $id, 'exampleid' => $cm->instance],        ③
    '*', MUST_EXIST);

echo $OUTPUT->render_from_template('mod_example/entry', [
    'title' => format_string($entry->name),             ④
]);
  1. ①Permissions first. Login and capability in the right context, before anything else happens.
  2. ②Type the input. No $_GET, no PARAM_RAW without a reason.
  3. ③Bind the record to the instance. Otherwise anyone with a login can read other people's entries (IDOR).
  4. ④Filter the output. Via format_string and Mustache templates, not as an HTML string.

On top of that: Moodle coding guidelines, PHPUnit and Behat in CI via moodle-plugin-ci, and a security review before every delivery. More under Security.

3Example

SituationA plugin from the Moodle 3.x days, the developer can no longer be reached, and the next upgrade is due.

Fig. 3.1: Life cycle of a plugin
MOODLE 3.13.93.11 4.1 LTS4.5 LTS5.05.1 BEFORE local_report 1.x NO LONGER MAINTAINED AFTER THE TAKEOVER local_report 2.x 1 2UPGRADE 3KEPT PER RELEASE TESTED IN CI
  1. ①Inventory. What the plugin does, where permission checks are missing, which APIs have been removed.
  2. ②Upgrade to 4.1 LTS with automated tests for every supported version.
  3. ③Then maintenance for every Moodle release, under a maintenance contract if you wish.

4Frequently asked questions

Moodle or ILIAS?

We work with both and give neutral advice. Often the decision has already been made; then it is about getting the most out of the existing system.

We have many third-party plugins. Is an upgrade still possible?

Yes. We review each plugin individually: update, replace or remove, and tell you beforehand what each option means.

Do you also run the platform?

Yes, if you wish, with updates, backups and monitoring. More under Maintenance & operations.

5 / Contact

What should your learning platform be able to do?

Describe your project in three short steps. We usually reply within one working day.