API Surface & Vulnerability Analysis

Complete endpoint inventory from the OnMark Angular production bundle, with authentication context and vulnerability classification.

1. Platform Overview

The OnMark evaluation platform is an ASP.NET MVC application serving an Angular SPA. The API surface is accessed through a single base URL constructed client-side:

// Base URL construction (Angular bundle)
apiurl = "https://" + window.location.hostname + "/" + ExamSeries_ApiUrl + "/"

// Example: https://cbseosm.onmark.co.in/cbseevalweb/
// ExamSeries_ApiUrl is derived from a server-side config value

All API calls go through an OnMarkWinWebAPI controller, with file downloads served from /Download/ and uploads to /upload/.

2. Shared Infrastructure Evidence

InstanceStatusServerPath
cbseosm.onmark.co.in503 (Maintenance)Microsoft IIS/10.0, ASP.NET/cbseevalweb/
bcuosm.onmark.co.in200 (Active)Microsoft IIS/10.0, ASP.NET MVC 5.2/cbseevalweb/

30+ additional subdomains were observed in SSL certificate transparency logs (crt.sh). Both confirmed-live instances serve the same Angular SPA with the same API controller prefix.

3. Authentication Architecture

The bundle reveals two distinct auth patterns:

Pattern A — Authenticated (most endpoints):

httpClient.post(Pi_apiurl + endpoint, payload, {
  withCredentials: true,
  headers: (new Headers).set("Content-Type", "application/json")
})

Sends cookies/XSRF tokens with each request. This is the standard pattern for CRUD operations.

Pattern B — Unauthenticated (photo & file endpoints):

getImage(url) {
  return this.http.get(url, { responseType: "blob" })
  // No withCredentials, no headers, no token
}

Used for photo retrieval and some file downloads. Relies entirely on server-side access control — if missing, content is publicly accessible.

4. Complete API Endpoint Inventory

4a. Authentication (Auth Controller)

EndpointMethodAuthPurposeNote
Auth/CheckUserIDPasswordPOSTNoLoginReturns OTP in response body
Auth/GetForgotPasswordGETNoForgot passwordReturns password reset data
Auth/InsertUpdateloginstatusPOSTNoLogin status trackingRecords IP/MAC/client info

4b. Evaluation Core (OnMarkWinEVal Controller)

EndpointPurposeAuth
GetScriptData_EditLoad answer script for markingYes
InsertUpdateValuationDetailsSave marks for a questionYes
InsertUpdateValuationDetails_RCSave marks (RC variant)Yes
InsertUpdateValuationDetails_RC_NewSave marks (new RC variant)Yes
GetTotalMarksTableGet summary marks for a scriptYes
GetQuestionWiseMarksGet per-question marksYes
GetSubjectSchemaGet marking scheme structureYes
GetSubjectStepsSchemaGet step-wise marking schemeYes
GetBundleDetailsByIdGet bundle (set of scripts) detailsYes
GetSectionWiseGet section-wise marksYes
GetParentSectionWiseGet parent section marksYes
GetSubCompleteCountGet completed scripts countYes

4c. Head Evaluator (HE) Operations

EndpointPurpose
HEApproveEvalApprove evaluator's marks
HEAssignedEvaluatorsList evaluators assigned to HE
HEValuatorDashboardHE dashboard data
HeBundlesBundles assigned to HE
GenerateHENewScriptGenerate new script for HE review
RejectorReleaseScriptReject or release a script back
GetHENotificationsHE notification list
GetHeBundleStatusDashboardHE bundle status summary
AssignEvaluatortoAHEAssign evaluator to AHE
AssignAHEAssign AHE role
GetAHEByCollegeIdGet AHE by college
GetEvaluatorsAHEByCollegeIdGet evaluators by college (AHE view)

4d. Script & PDF Generation

EndpointPurposeVuln?
GenerateEvaluatedScriptPDFGenerate marked PDF
GenerateScannedScriptPDFGenerate scan PDF
GenerateNewScriptGenerate new blank script
GenerateNewScript_VerificationGenerate script for verification
ExtractImagesExtract images from script
ExtractImagesS3Extract images from S3 storage
DeleteSciptImagesDelete script imagesIDOR risk
GetAnnotationsGet marking annotations
GetCommentsByScriptIdGet evaluator comments
GetNotesByScriptIdGet notes on a script
GetQNoCommentsGet question-specific comments

4e. Reports

EndpointPurpose
ValuatorDashboardEvaluator dashboard summary
GetEValuatorScriptReportEvaluator script-level report
GetValuatorScriptReportAlternate script report
GetValuatorSubjectwiseReportSubject-wise report
GetValuatorDaywiseReportDay-wise marking report
GetRejectionReportRejected scripts report
RefreshEvalMarksReportRefresh evaluation marks
RefreshEvaluatorwiseMarksReportRefresh evaluator marks
RefreshMarksReportRefresh general marks
getrcbarcode_winterseriesGet RC barcode for winter series

4f. Evaluator Management

EndpointPurpose
GetEvaluatorsList all evaluators
GetEvaluatorsByIdGet evaluator by ID
GetEvaluatorsByCollegeIdGet evaluators by college
GetValuatorwithIDGet valuator with ID
AddEvaluatorDetailsAdd new evaluator
UpdateEvaluatorUpdate evaluator info
UpdateEvaluatorDetailsUpdate evaluator details
UpdateEvaluatorBankUpdate evaluator bank details
UpdateFVProfileUpdate face verification profile
GetSchoolsBySchlCodeGet school by code
GetSubjectsList subjects
GetSubjectListByPogrammeSubjects by programme
GetPogrammeList programmes

4g. Verification & Re-evaluation

EndpointPurpose
GenerateAllVerificationGenerate verification for all
GetAllVerificationScriptsList verification scripts
EnableEditOptionForEvalEnable mark editing
GetEditHistoryGet mark edit history
UpdateMasterSetUpdate master mark set

4h. Notifications & Session

EndpointPurpose
GetNotificationsGet user notifications
GetHENotificationsGet HE notifications
DeleteNotificationsDelete notifications
UpdateNotificationDataUpdate notification
InsertUpdateloginstatusUpdate login status
ChangePasswordChange evaluator password
GenerateLoginQRCodeGenerate QR code for login
CheckQRCodeLoginVerify QR code login

4i. File Downloads

EndpointPurposeAuth
Download/finalpdf/{id}.pdfDownload marked answer sheetNone in client
Download/QP_Files/{filename}Download question paperNone in client
Download/Schema_Files/{filename}Download marking schemeNone in client
OnMarkWinWebAPI/face/GetUserPhoto/{code}.jpgDownload evaluator photoNone in client
upload/{code}.jpgUpload evaluator photoYes

4j. Angular Routes (Client-side)

RoutePurposeGuard?
/loginLogin pageNo
/dashboardEvaluator dashboardNo guard
/evalscriptsviewView scripts for markingNo guard
/heallscriptsHE: all scriptsNo guard
/evaluatordetailsEvaluator detailsNo guard
/verificationdashboardVerification dashboardNo guard
/profileUser profileNo guard
/webcamtestWebcam test pageNo guard
/contactdetailsContact detailsNo guard
/recheckRecheck pageNo guard
/viewscriptView scriptNo guard
/viewscript-rcView script (RC)No guard
/viewscriptverfView verification scriptNo guard
/selectseriesExam series selectionNo
/notificationsNotificationsNo guard
/evaluatorsManage evaluatorsNo guard
/marksreportMarks reportNo guard
/UFMReportUnfair means reportNo guard

5. Vulnerability Classification

🔴 V-01: IDOR — Predictable Answer-Sheet PDF Download

Endpoint: Download/finalpdf/{total_marks_id}.pdf

Evidence: Bundle contains hardcoded ID 93836. URL constructed client-side with no access-control token. Opens in new 800×600 window.

Impact: Any authenticated user could enumerate sequential integer IDs to download other evaluators' marked answer sheets, exposing student handwriting, evaluator annotations, and final marks.

Prevalence: Affects all OnMark instances sharing this controller.

🔴 V-02: Password Change Without Old Password Verification

Endpoint: OnMarkWinWebAPI/OnMarkWinEVal/ChangePassword

Evidence: Payload is {ValuatorID, pin_NewPassword} — no old password field in client form or API payload.

Impact: Account takeover. Any authenticated user who knows another evaluator's ValuatorID can reset their password, locking them out or impersonating them during evaluation.

Note: Partially disclosed by Nisarga Adhikary. Confirmed here with exact payload structure.

🔴 V-03: Unauthenticated Photo Retrieval

Endpoint: OnMarkWinWebAPI/face/GetUserPhoto/{user_code}.jpg

Evidence: Called via http.get(url, {responseType: "blob"}) with no withCredentials, no auth headers, no token. Other endpoints in the same bundle explicitly use withCredentials: true.

Impact: Evaluator photographs — potentially government ID photos — could be accessible to anyone who guesses a user_code. User codes follow a predictable pattern (e.g., K82XXXXXXX).

Prevalence: Affects all OnMark instances using the same /face/ path.

🟡 Additional Observations (Lower Confidence — Server-Side Verification Needed)

IP/MAC Tracking: Login status endpoint (InsertUpdateloginstatus) records the client's IP address, MAC address, browser user-agent, and OS. This data is transmitted in the login response and could be accessible to other users if the status endpoint has IDOR issues.

QR Code Login: A GenerateLoginQRCode / CheckQRCodeLogin flow exists. The bundle polls CheckQRCodeLogin every 5 seconds. The security of this QR-based session transfer depends on server-side implementation.

Face Verification: A /webcamtest route and CheckPhoto / RegisterPhoto API endpoints exist for facial recognition-based attendance verification. The photos are stored at /upload/{user_code}.jpg.

Draft Mode: An EnableEditOptionForEval endpoint exists alongside GetEditHistory, suggesting marks can be edited after initial submission. The edit history is queryable, but the controls around who can enable/disable editing are unclear.

Question Paper Downloads: Download/QP_Files/{filename} serves question papers. Like the PDF download, this uses no client-side auth — security depends entirely on server-side access control.

6. Source Attribution

EvidenceSourceDate
Angular production bundle (1.7 MB)Wayback Machine — cbse.onmark.co.in3 Mar 2026
Selenium automation codeGitHub — segrgokul/New_Coempt_AutomationCloned May 2026
SSL certificates (30+ subdomains)crt.sh — *.onmark.co.inQueried May 2026
Live HTTP headersDirect curl to cbseosm/bcuosm.onmark.co.in30 May 2026

All evidence archived at zo.pub/cashlessconsumer/cbse-osm-onmarks-osint (1,400+ files).