php2shell-scanner.git

php2shell-scanner

~ Check PHP2Shell (CVE-2026-109618, CVE-2026-109619) from inside your server: distribution backports, missed restarts and interim mitigations, verdicts computed in the browser.
git clone https://github.com/debuman/php2shell-scanner.git

site/i18n.js (10986B)

      1 // Page chrome strings. Verdict text comes from the engine's own catalog
      2 // (lib/messages.js); this file only covers what app.js renders around it.
      3 
      4 // Keeps "PHP 8.1" on one line in narrow table cells.
      5 const NBSP = String.fromCharCode(0xa0);
      6 
      7 export const UI = {
      8   en: {
      9     locale: 'en-GB',
     10     sources: { selfcheck: 'PHP probe', servercheck: 'server script', header: 'X-Powered-By header', cli: 'php -v output', version: 'version string' },
     11     levels: { high: 'High', medium: 'Medium', info: 'Note', ok: 'Clear', warn: 'Check', bad: 'Risk' },
     12     statuses: { ok: 'Applied', warn: 'Not applied', info: 'Note' },
     13     input: 'Input',
     14     distroData: 'Distribution data',
     15     evidence: 'Evidence',
     16     exposure: 'SAPI exposure',
     17     exposurePatched: 'Exposure without the fix',
     18     actions: 'Required actions',
     19     indicators: 'Compromise indicators',
     20     mitigations: 'Interim mitigations',
     21     hardening: 'Hardening',
     22     mitIntro: 'These narrow the known attack paths while you patch; none of them is a fix. Values are effective for the directory the probe ran in. Set them with php_admin_value or php_admin_flag so application code cannot override them.',
     23     hardeningIntro: 'The fix is present. Shown for reference; the upstream advisory suggests keeping upload progress off where it is not used.',
     24     setting: 'Setting',
     25     value: 'Value',
     26     status: 'Status',
     27     advisories: 'Distribution advisories',
     28     notes: 'Notes',
     29     stale: (when) => `The distribution data was last refreshed on ${when}. Confirm against your distribution's current notices.`,
     30     sourceFailed: (name, when) => (when
     31       ? `The latest refresh of the ${name} data failed. The last successful refresh was on ${when}. Check your distribution's current security notices as well.`
     32       : `The latest refresh of the ${name} data failed, so this result uses data from an earlier refresh. Check your distribution's current security notices as well.`),
     33     distroNotLoaded: 'The distribution data did not load, so this result could not use it. Reload the page and run the check again.',
     34     upstreamData: 'Fixed releases',
     35     crossChecked: (when) => `cross-checked ${when}`,
     36     refreshFailed: 'latest refresh failed',
     37     refreshFailedSince: (when) => `latest refresh failed, last successful refresh ${when}`,
     38     dataChanged: (when) => `last changed ${when}`,
     39     notLoaded: 'did not load',
     40     sourceNames: { 'osv-debian': 'Debian (OSV)', 'osv-ubuntu': 'Ubuntu (OSV)', redhat: 'Red Hat', ghsa: 'php-src advisories' },
     41     replaceConfirm: 'Replace the text in the box with this example? The output you pasted will be lost.',
     42     copyCommand: 'Copy command',
     43     copied: 'Copied',
     44     copyReport: 'Copy report',
     45     copyFailed: 'Copy failed',
     46     reportTitle: (label) => `PHP2Shell check: ${label}`,
     47     reportFooter: (repo, when) => `Checked with php2shell-scanner (${repo}) on ${when}. Verdicts rest on versions, packages and settings; they are not proof that an attack would fail.`,
     48     loadFailedTitle: 'Version data did not load',
     49     loadFailedBody: 'Reload the page. If it keeps failing, open an issue on GitHub.',
     50     branch81: `PHP${NBSP}8.1 and older`,
     51     all54: 'All from 5.4; older not determined',
     52     noUpstream: (branches) => (branches
     53       ? `No upstream release. php-src has minimal backport branches for ${branches}; see also the distribution packages.`
     54       : 'No upstream release; see the distribution packages.'),
     55     eol: (date) => `EOL ${date}`,
     56     fixPending: 'Fix pending',
     57     noData: 'No data',
     58     proTitle: 'Fix ships through Ubuntu Pro (ESM)',
     59     distroFailed: 'Distribution data could not be loaded.',
     60     rhIntro: 'Red Hat backports fixes into module streams without changing the upstream version, so these are not compared by version. On the RHEL family the server script reads the CVE entries in the package changelog instead.',
     61     rhFailed: 'Red Hat data could not be loaded.',
     62     statusUpstream: (date) => `Upstream fixed versions last edited ${date}.`,
     63     statusUpstreamChecked: (when) => `Upstream fixed versions cross-checked against the php-src advisories on ${when}.`,
     64     statusUpstreamUnchecked: (date) => `Upstream fixed versions last edited ${date}; the latest refresh could not cross-check them against the php-src advisories.`,
     65     statusUpstreamMismatch: (date) => `Upstream fixed versions last edited ${date}; the latest refresh found a difference from the php-src advisories, so check the advisories directly.`,
     66     statusDistro: (changed, checked) => (checked
     67       ? `Distribution data last changed ${changed} and last checked ${checked}; it is refreshed every 6 hours from OSV and Red Hat.`
     68       : `Distribution data last changed ${changed}; it is refreshed every 6 hours from OSV and Red Hat.`),
     69     statusDistroMissing: 'Distribution data did not load.',
     70     statusFailed: (list) => `The latest refresh failed for ${list}, so data from an earlier refresh is shown.`,
     71     statusLastSuccess: (name, when) => `The last successful refresh of ${name} was on ${when}.`,
     72     rhelFamily: 'RHEL family',
     73     rhelOption: (rel) => `RHEL ${rel} / Rocky / AlmaLinux`,
     74     upstreamOption: 'Self-built or official Docker image',
     75     utc: 'UTC',
     76   },
     77   ko: {
     78     locale: 'ko-KR',
     79     sources: { selfcheck: 'PHP 프로브', servercheck: '서버 스크립트', header: 'X-Powered-By 헤더', cli: 'php -v 출력', version: '버전 문자열' },
     80     levels: { high: '높음', medium: '보통', info: '참고', ok: '이상 없음', warn: '확인 필요', bad: '위험' },
     81     statuses: { ok: '적용됨', warn: '미적용', info: '참고' },
     82     input: '입력',
     83     distroData: '배포판 데이터',
     84     evidence: '근거',
     85     exposure: 'SAPI 노출도',
     86     exposurePatched: '수정 전 노출도',
     87     actions: '필요한 조치',
     88     indicators: '침해 지표',
     89     mitigations: '임시 완화 설정',
     90     hardening: '추가 보안 설정',
     91     mitIntro: '패치를 마칠 때까지 알려진 공격 경로를 좁혀 주는 설정이며, 어느 것도 패치를 대신하지 않습니다. 값은 프로브가 실행된 디렉터리 기준의 실제 적용값입니다. 애플리케이션 코드가 되돌리지 못하도록 php_admin_value 또는 php_admin_flag로 설정하세요.',
     92     hardeningIntro: '수정이 적용되어 있습니다. 참고용으로 표시합니다. 업스트림 공식 권고는 업로드 진행률 기능을 쓰지 않는다면 꺼 두기를 권합니다.',
     93     setting: '설정',
     94     value: '값',
     95     status: '상태',
     96     advisories: '배포판 보안 권고',
     97     notes: '참고 사항',
     98     stale: (when) => `배포판 데이터를 마지막으로 갱신한 시각은 ${when}입니다. 배포판의 최신 보안 권고도 함께 확인하세요.`,
     99     sourceFailed: (name, when) => (when
    100       ? `${name} 데이터의 최근 갱신이 실패했습니다. 마지막으로 성공한 갱신은 ${when}입니다. 배포판의 최신 보안 권고도 함께 확인하세요.`
    101       : `${name} 데이터의 최근 갱신이 실패해 이전에 받은 데이터로 확인했습니다. 배포판의 최신 보안 권고도 함께 확인하세요.`),
    102     distroNotLoaded: '배포판 데이터를 불러오지 못해 이 결과에 반영하지 못했습니다. 페이지를 새로 고친 뒤 다시 확인하세요.',
    103     upstreamData: '수정 릴리스',
    104     crossChecked: (when) => `${when}에 공식 권고와 대조`,
    105     refreshFailed: '최근 갱신 실패',
    106     refreshFailedSince: (when) => `최근 갱신 실패, 마지막 성공 ${when}`,
    107     dataChanged: (when) => `${when}에 마지막 변경`,
    108     notLoaded: '불러오지 못함',
    109     sourceNames: { 'osv-debian': 'Debian(OSV)', 'osv-ubuntu': 'Ubuntu(OSV)', redhat: 'Red Hat', ghsa: 'php-src 공식 권고' },
    110     replaceConfirm: '입력란의 내용을 이 예시로 바꾸시겠습니까? 붙여넣은 출력은 사라집니다.',
    111     copyCommand: '명령 복사',
    112     copied: '복사됨',
    113     copyReport: '결과 복사',
    114     copyFailed: '복사 실패',
    115     reportTitle: (label) => `PHP2Shell 확인 결과: ${label}`,
    116     reportFooter: (repo, when) => `php2shell-scanner(${repo})로 ${when}에 확인했습니다. 결과는 버전, 패키지, 설정을 근거로 하며 공격이 실패한다는 증명이 아닙니다.`,
    117     loadFailedTitle: '버전 데이터를 불러오지 못했습니다',
    118     loadFailedBody: '페이지를 새로 고치세요. 계속 실패하면 GitHub에 이슈를 남겨 주세요.',
    119     branch81: `PHP${NBSP}8.1 이하`,
    120     all54: '5.4 이상 전체, 그 이전은 판단 불가',
    121     noUpstream: (branches) => (branches
    122       ? `업스트림 수정 릴리스가 없습니다. php-src에 ${branches}용 최소 백포트 브랜치가 있습니다. 배포판 패키지도 확인하세요.`
    123       : '업스트림 수정 릴리스가 없습니다. 배포판 패키지를 확인하세요.'),
    124     eol: (date) => `지원 종료 ${date}`,
    125     fixPending: '수정 대기',
    126     noData: '데이터 없음',
    127     proTitle: 'Ubuntu Pro(ESM)로만 배포되는 수정입니다',
    128     distroFailed: '배포판 데이터를 불러오지 못했습니다.',
    129     rhIntro: 'Red Hat은 업스트림 버전 번호를 바꾸지 않고 모듈 스트림에 수정을 백포트하므로 버전으로 비교하지 않습니다. RHEL 계열에서는 서버 스크립트가 패키지 변경 이력의 CVE 기록을 대신 확인합니다.',
    130     rhFailed: 'Red Hat 데이터를 불러오지 못했습니다.',
    131     statusUpstream: (date) => `업스트림 수정 버전 목록은 ${date}에 마지막으로 변경했습니다.`,
    132     statusUpstreamChecked: (when) => `업스트림 수정 버전 목록은 ${when}에 php-src 공식 권고와 대조했습니다.`,
    133     statusUpstreamUnchecked: (date) => `업스트림 수정 버전 목록은 ${date}에 마지막으로 변경했으며, 최근 갱신에서는 php-src 공식 권고와 대조하지 못했습니다.`,
    134     statusUpstreamMismatch: (date) => `업스트림 수정 버전 목록은 ${date}에 마지막으로 변경했으며, 최근 갱신에서 php-src 공식 권고와 다른 점이 발견됐습니다. 공식 권고를 직접 확인하세요.`,
    135     statusDistro: (changed, checked) => (checked
    136       ? `배포판 데이터는 ${changed}에 마지막으로 바뀌었고 ${checked}에 마지막으로 확인했습니다. OSV와 Red Hat에서 6시간마다 갱신합니다.`
    137       : `배포판 데이터는 ${changed}에 마지막으로 바뀌었고, OSV와 Red Hat에서 6시간마다 갱신합니다.`),
    138     statusDistroMissing: '배포판 데이터를 불러오지 못했습니다.',
    139     statusFailed: (list) => `최근 갱신에서 ${list} 데이터를 받지 못해 이전에 받은 데이터를 표시합니다.`,
    140     statusLastSuccess: (name, when) => `${name}의 마지막 갱신 성공 시각은 ${when}입니다.`,
    141     rhelFamily: 'RHEL 계열',
    142     rhelOption: (rel) => `RHEL ${rel} / Rocky / AlmaLinux`,
    143     upstreamOption: '직접 빌드 또는 공식 Docker 이미지',
    144     utc: 'UTC',
    145   },
    146 };